python-3.x - CSV 阅读器无法读取正确的列
问题描述
我再次抱歉。所以这是我试图读取的数据的一个例子。
nhy, time, dt= 0 0.0000D+00 1.9416D-02
nhy, time, dt= 1 1.9400D-02 2.2416D-02
nhy, time, dt= 2 4.3800D-02 3.0416D-02
nhy, time, dt= 3 7.3540D-02 4.8416D-02
nhy, time, dt= 4 1.3350D-01 6.9416D-02
我正在尝试使用此代码提取 dt 列,
dt50 = []
file = "timestep.log"
col_list = ["dt"]
data = pd.read_csv(file, sep= '\s+|\t+|\s+\t+|\t+\s', skiprows = (30), usecols = col_list
dt50.extend(data['dt'])
print(dt50)
这一切都只返回 dt 列而不是实际值列。我猜这与我声明我想要的列有关,但不确定我哪里出错了。
对不起,因为我缺乏编码能力而打扰大家。
解决方案
您只是进入dt
输出,因为它将第一行数据解释为列。因此,输出数据如下所示:
nhy, time, dt = 0 0.0000D+00 1.9416D-02
0 nhy, time, dt = 1 1.9416D-02 2.4464D-02
1 nhy, time, dt = 2 4.3881D-02 3.0825D-02
2 nhy, time, dt = 3 7.4706D-02 3.8840D-02
3 nhy, time, dt = 4 1.1355D-01 4.8938D-02
4 nhy, time, dt = 5 1.6248D-01 6.1662D-02
5 nhy, time, dt = 6 2.2415D-01 7.7694D-02
6 nhy, time, dt = 7 3.0184D-01 9.7895D-02
7 nhy, time, dt = 8 3.9974D-01 1.2335D-01
8 nhy, time, dt = 9 5.2308D-01 1.5542D-01
9 nhy, time, dt = 10 6.7850D-01 1.9583D-01
如您所见,这些列是:nhy,
, time,
, dt
, =
, 0
, 0.0000D+00
, 1.9416D-02
. 因此,当您尝试通过说 访问这些值时data["dt"]
,位于该列下的唯一数据"dt"
就是 的其他字符串值"dt"
。
这里的问题是您的正则表达式模式。您当前的正则表达式模式检查它具有任意数量的空格和/或制表符的实例。因为nhy, time, dt =
都由空格和/或制表符分隔,所以它将为每个由空格分隔的元素创建列。让我们用 替换这个正则表达式\s{2,}
,它将检查两个或多个空格(实际值都被两个空格唯一分隔)。然后,我们可以用 为列分配自己的名称names=["nhy", "time", "dt"]
。然后,您的read_csv
行将如下所示:
file = "timestep.log"
data = pd.read_csv(file, sep="\s{2,}", names=["nhy", "time", "dt"])
这给了我们:
nhy time dt
nhy, time, dt = 0 0.0000D+00 1.9416D-02
nhy, time, dt = 1 1.9416D-02 2.4464D-02
nhy, time, dt = 2 4.3881D-02 3.0825D-02
nhy, time, dt = 3 7.4706D-02 3.8840D-02
nhy, time, dt = 4 1.1355D-01 4.8938D-02
nhy, time, dt = 5 1.6248D-01 6.1662D-02
nhy, time, dt = 6 2.2415D-01 7.7694D-02
nhy, time, dt = 7 3.0184D-01 9.7895D-02
nhy, time, dt = 8 3.9974D-01 1.2335D-01
nhy, time, dt = 9 5.2308D-01 1.5542D-01
现在我们在各自的列中拥有所有数据。我们所要做的就是重置索引,目前是nhy, time, dt =
:
data.reset_index(drop=True, inplace=True)
这给了我们:
nhy time dt
0 0 0.0000D+00 1.9416D-02
1 1 1.9416D-02 2.4464D-02
2 2 4.3881D-02 3.0825D-02
3 3 7.4706D-02 3.8840D-02
4 4 1.1355D-01 4.8938D-02
5 5 1.6248D-01 6.1662D-02
6 6 2.2415D-01 7.7694D-02
7 7 3.0184D-01 9.7895D-02
8 8 3.9974D-01 1.2335D-01
9 9 5.2308D-01 1.5542D-01
现在剩下要做的就是扩展您现有的列表:
dt50.extend(data["dt"].tolist())
这给了我们想要的输出:
['1.9416D-02', '2.4464D-02', '3.0825D-02', '3.8840D-02', '4.8938D-02', '6.1662D-02', '7.7694D-02', '9.7895D-02', '1.2335D-01', '1.5542D-01']
推荐阅读
- c# - 如何在 C# 中从文本文件中写入和读取列表<>
- python - Python - QT。单击按钮即可关闭不需要的主窗口。Prossed 已完成,退出代码为 1,但没有错误
- php - 来自多个 DNS 的 apache2 负载均衡器的自定义参数
- android - 从传递到 onActivityResult() 的 Intent 获取视频路径时找不到文件异常
- jenkins - Jenkins - 如何在自由式项目中指定 gradle 任务列表
- xml - OxygenXML:向 teiCorpus 框架添加一个临时属性
- python - 使用函数为 2d 密度图和 3d 表面图创建电场阵列
- python - Python pandas .map 仅保存最后一次编辑
- html - 如何在不断显示背景图像的 div 下放置一个小三角形?
- android - 获取 NegativeArraySizeException