pandas to_csv和from_csv,reords数量不匹配

时间:2017-05-11 11:01:25

标签: pandas

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

1 个答案:

答案 0 :(得分:1)

pd.read_csv调用的CSV解析器会将未加引号的\r解释为行尾。 要保护\r不被解释为行尾,请将quoting=csv.QUOTE_NONNUMERICquoting=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,则可以省略 使用

从CSV中获取索引
orig.to_csv('/tmp/file1.csv', quoting=csv.QUOTE_NONNUMERIC, index=False)
new = pd.read_csv('/tmp/file1.csv')