我有一个.csv文件,该文件可以在pandas DataFrame中完美读取,它只有一列,我们将其命名为Column1
,它具有5个不同的值(0,1,2,3,4
),我正在尝试创建四个新的csv文件,适用于我的每个类别。
为此,我使用pd.to_csv
及其默认参数。但是,我的问题是,数据框的第二列由字符串组成(字符串之间带有引号),这些字符串内部可能有断点,因此当我创建新文件时,Column2
的数据将被移至{{ 1}}。像这样:
Column1
您是否知道在没有这种效果的情况下如何创建新的数据框?我无法将原始文件放在如此繁重的位置,但是如果需要,我可以尝试创建一个示例。
我已经尝试过Column1 Column2
0 'this is correct'
1 'this
is not correct'
中的line_separator = \n
参数,但是由于我正在读取的文件的每一行都应该是新文件中的一行,因此它给出了错误。
答案 0 :(得分:0)
为避免该问题,您可以为每个类别创建一个新的dictionary
,并使用熊猫为每个字典创建一个csv,如果遇到麻烦,我将提供一个示例
答案 1 :(得分:0)
您有几种解决问题的方法。
1-您要从列中删除所有\ n,然后使用
d.Column2 = d.Column2.apply(lambda x : x.replace('\n', ''))
然后您将其打印在文件上。
2-您想保留\ n,这就是信息。您可以添加quotechars。
pd.to_csv(..., quotechars='"') #but this is by default right ?
您得到了:
“ Column1”“ Column2”
“ 0”“此” 是正确的'“
“ 1”“此”
不正确'“
这里一切都是正确的,因为任何好的工具都会使用引号来知道最后一行是Column2的一部分。
使用熊猫读取文件时,请为参数quotechars使用相同的值。
答案 2 :(得分:0)
我知道这是一个老问题,但是以上答案似乎并不能完美解决。
我最近有一个类似的问题,并想出了解决方法。原因是您的Column2
中的第二个值具有字符\r
或\n
,它们将创建新行。由于我使用的是Mac,因此如果值包含\r
,则在应用data.to_csv
时它将换行,其中data
是pd.DataFrame
对象。
解决方案
在escapechar="\r"
中放入escapechar="\n"
或data.to_csv()
参数。
data.to_csv(file_path, escapechar="\r")
。
示例
重现折线问题:
data_dict== {'Column1': [1,2], 'Column2': ["this is correct", "this\ris not correct"]}
data_df = pd.DataFrame(data_dict)
保存到csv
data_df.to_csv('test.csv')
然后,您将遇到断线问题。
如果我们执行data_df.to_csv('test.csv', escapechar="\r")
,则问题将得到解决,并且字符\r
也将存在。
答案 3 :(得分:0)
没有其他建议对我有用。在保存为CSV之前,我只是将所有\n
替换为\\n
,它将保留换行符。
df.Column2 = df.Column2.apply(lambda x : x.replace('\n', '\\n'))
df.to_csv("df.csv", index=False)