gpt4 book ai didi

python - pandas 移动列名称并用 NAN 填充最后一列

转载 作者:行者123 更新时间:2023-12-02 04:19:51 25 4
gpt4 key购买 nike

我有一个以制表符分隔的 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

我使用以下方式读取了 csv:

import pandas as pd

df = pd.read_csv('foo.csv', sep='\t')

这给出了输出:

    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

这似乎将我的列名称移动了一位,并导致我的最后一列填充了 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)])

我得到以下输出:

    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

此外,如果我尝试只抓取两个特定的列,它似乎可以正确地抓取它们。如 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'

因此,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

我们可以使用

>>> 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

关于python - pandas 移动列名称并用 NAN 填充最后一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31321253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com