我有一个以制表符分隔的 csv 文件。
Example:
Rec# Cyc# Step Test (Sec) Step (Sec) Amp-hr Watt-hr Amps Volts State ES DPt Time
1 0 1 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 3.41214609 R 0 09:44:13
2 0 1 30.00000000 30.00000000 0.00000000 0.00000000 0.00000000 3.41077280 R 1 09:44:43
3 0 1 60.00000000 60.00000000 0.00000000 0.00000000 0.00000000 3.41077280 R 1 09:45:13
Run Code Online (Sandbox Code Playgroud)
我使用以下方式阅读了 csv:
import pandas as pd
df = pd.read_csv('foo.csv', sep='\t')
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
Rec# Cyc# Step Test (Sec) Step (Sec) Amp-hr Watt-hr Amps Volts State ES DPt Time
1 0 1 0.00 0.00 0.000000 0.000000 0.000000 3.412146 R 0 09:44:13 NaN
2 0 1 30.00 30.00 0.000000 0.000000 0.000000 3.410773 R 1 09:44:43 NaN
3 0 1 60.00 60.00 0.000000 0.000000 0.000000 3.410773 R 1 09:45:13 NaN
Run Code Online (Sandbox Code Playgroud)
这似乎将我的列名移动了一位,并导致我的最后一列填充了 NAN 而不是日期。
如果我执行以下操作:
import pandas as pd
df = pd.read_csv("foo.csv", sep="\t")
df = pd.read_csv("foo.csv", sep="\t", usecols=df[:len(df.columns)])
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Rec# Cyc# Step Test (Sec) Step (Sec) Amp-hr Watt-hr Amps Volts State ES DPt Time
1 1 0 1 0.00 0.00 0.000000 0.000000 0.000000 3.412146 R 0 09:44:13
2 2 0 1 30.00 30.00 0.000000 0.000000 0.000000 3.410773 R 1 09:44:43
3 3 0 1 60.00 60.00 0.000000 0.000000 0.000000 3.410773 R 1 09:45:13
Run Code Online (Sandbox Code Playgroud)
另外,如果我尝试只抓取两个特定的列,它似乎可以正确地抓取它们。如 df = df = pd.read_csv("foo.csv", sep="\t", usecols=[3, 8]) 中所示,将正确抓取时间(秒)列和伏特列。
我希望有一种方法可以正确地构建数据,而不需要我读两次。
提前致谢!
大庭
看起来有一些尾随标签:
>>> with open("oniwa.dat") as fp:
... for line in fp:
... print(repr(line))
...
'Rec#\tCyc#\tStep\tTest (Sec)\tStep (Sec)\tAmp-hr\tWatt-hr\tAmps\tVolts\tState\tES\tDPt Time\n'
'1\t0\t1\t0.00000000\t0.00000000\t0.00000000\t0.00000000\t0.00000000\t3.41214609\tR\t0\t09:44:13\t\n'
'2\t0\t1\t30.00000000\t30.00000000\t0.00000000\t0.00000000\t0.00000000\t3.41077280\tR\t1\t09:44:43\t\n'
'3\t0\t1\t60.00000000\t60.00000000\t0.00000000\t0.00000000\t0.00000000\t3.41077280\tR\t1\t09:45:13\n'
Run Code Online (Sandbox Code Playgroud)
结果,pandas 得出结论,存在一个索引列。我们可以使用 来告诉它index_col。具体来说,而不是
>>> pd.read_csv("oniwa.dat", sep="\t") # no good
Rec# Cyc# Step Test (Sec) Step (Sec) Amp-hr Watt-hr Amps Volts \
1 0 1 0 0 0 0 0 3.412146 R
2 0 1 30 30 0 0 0 3.410773 R
3 0 1 60 60 0 0 0 3.410773 R
State ES DPt Time
1 0 09:44:13 NaN
2 1 09:44:43 NaN
3 1 09:45:13 NaN
Run Code Online (Sandbox Code Playgroud)
我们可以用
>>> pd.read_csv("oniwa.dat", sep="\t", index_col=False) # hooray!
Rec# Cyc# Step Test (Sec) Step (Sec) Amp-hr Watt-hr Amps Volts \
0 1 0 1 0 0 0 0 0 3.412146
1 2 0 1 30 30 0 0 0 3.410773
2 3 0 1 60 60 0 0 0 3.410773
State ES DPt Time
0 R 0 09:44:13
1 R 1 09:44:43
2 R 1 09:45:13
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2616 次 |
| 最近记录: |