我对pandas(python 3.5)
有这个奇怪的问题我将数据帧保存到csv,然后将相同的文件读回数据帧。我在新数据框中获得了不同数量的记录。 奇怪的是,记录数量增加了!!
data_n.to_csv('file1.csv')
data_n1=pd.read_csv('file1.csv')
print (len(data_n),len(data_n1),len(data_n1)-len(data_n))
206637 208299 1662
以下是一些演示此问题的代码:
import pandas as pd
orig = pd.DataFrame({'url':['foo\rbar', 'baz'], 'col':[1, 2]})
orig['idx'] = range(len(orig))
print(orig)
# col url idx
# 0 1 foo\rbar 0
# 1 2 baz 1
orig.to_csv('/tmp/file1.csv')
new = pd.read_csv('/tmp/file1.csv')
print(new)
# Unnamed: 0 col url idx
# 0 0 1 foo NaN
# 1 bar 0 NaN NaN
# 2 1 2 baz 1.0
答案 0 :(得分:1)
pd.read_csv
调用的CSV解析器会将未加引号的\r
解释为行尾。
要保护\r
不被解释为行尾,请将quoting=csv.QUOTE_NONNUMERIC
或quoting=csv.QUOTE_ALL
传递给to_csv
来电。要告诉Pandas将第一列解释为索引,请将index_col=0
传递给pd.read_csv
:
import csv
import pandas as pd
orig = pd.DataFrame({'url':['foo\rbar', 'baz'], 'col':[1, 2]})
orig['idx'] = range(len(orig))
print(orig)
# col url idx
# 0 1 foo\rbar 0
# 1 2 baz 1
orig.to_csv('/tmp/file1.csv', quoting=csv.QUOTE_NONNUMERIC)
new = pd.read_csv('/tmp/file1.csv', index_col=0)
print(new)
# col url idx
# 0 1 foo\rbar 0
# 1 2 baz 1
或者,如果您不需要或希望保留orig.index
,则可以省略
使用
orig.to_csv('/tmp/file1.csv', quoting=csv.QUOTE_NONNUMERIC, index=False)
new = pd.read_csv('/tmp/file1.csv')