【发布时间】:2022-01-02 14:02:18
【问题描述】:
pandas.read_csv 不是df.to_csv 的直接倒数函数,这对我来说似乎很奇怪。在此图中,请注意在使用所有默认设置时,原始数据帧和最终数据帧的“未命名”列有何不同。
In [1]: import pandas as pd
In [2]: orig_df = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}); orig_df
Out[2]:
AAA BBB CCC
0 4 10 100
1 5 20 50
2 6 30 -30
3 7 40 -50
[4 rows x 3 columns]
In [3]: orig_df.to_csv('test.csv')
In [4]: final_df = pd.read_csv('test.csv'); final_df
Out[4]:
Unnamed: 0 AAA BBB CCC
0 0 4 10 100
1 1 5 20 50
2 2 6 30 -30
3 3 7 40 -50
[4 rows x 4 columns]
似乎默认的read_csv 应该改为
In [6]: final2_df = pd.read_csv('test.csv', index_col=0); final2_df
Out[7]:
AAA BBB CCC
0 4 10 100
1 5 20 50
2 6 30 -30
3 7 40 -50
[4 rows x 3 columns]
或者应该改为默认的to_csv
In [8]: df.to_csv('test2.csv', index=False)
读取时会给出
In [9]: pd.read_csv('test2.csv')
Out[9]:
AAA BBB CCC
0 4 10 100
1 5 20 50
2 6 30 -30
3 7 40 -50
[4 行 x 3 列]
(也许这应该发送给开发人员,但我真的很感兴趣为什么这是默认行为。希望它也可以帮助其他人避免我的困惑)。
【问题讨论】:
-
我认为这是因为在您使用
pd.DataFrame.from_csv之前,默认值确实是index_col=0但这造成了各种破坏,因为 csv 有各种奇怪的格式,所以这种行为与 @987654333 不同@。这是一个很好的观点,值得发布作为对github的改进 -
说真正的倒数是
from_csv,但它不再更新有利于一般的read_table和read_csv,它们具有更大的灵活性 -
我在 read_excel 中学到了这一点,因为没有往返,例如,如果你保存一个多索引的 excel,你将很难将它恢复到数据帧中
-
我通常不清楚是这里还是 GitHub(或两者兼有),但我认为这个肯定在 SO 中占有一席之地,因为你会获得更广泛的受众,我同意它是很高兴告知人们这样的默认行为(以及如何在需要时解决它)。