我有一个字符串列,有时在字符串中有回车符:
import pandas as pd
from io import StringIO
datastring = StringIO("""\
country metric 2011 2012
USA GDP 7 4
USA Pop. 2 3
GB GDP 8 7
""")
df = pd.read_table(datastring, sep='\s\s+')
df.metric = df.metric + '\r' # append carriage return
print(df)
country metric 2011 2012
0 USA GDP\r 7 4
1 USA Pop.\r 2 3
2 GB GDP\r 8 7
写入和读取csv时,数据框已损坏:
df.to_csv('data.csv', index=None)
print(pd.read_csv('data.csv'))
country metric 2011 2012
0 USA GDP NaN NaN
1 NaN 7 4 NaN
2 USA Pop. NaN NaN
3 NaN 2 3 NaN
4 GB GDP NaN NaN
5 NaN 8 7 NaN
解决此问题的最佳方法是什么?一个显而易见的方法是首先清理数据:
df.metric = df.metric.str.replace('\r', '')
答案 0 :(得分:9)
指定K ENS4S Gm22848 TSS18078 Cancer 2
:
lineterminator
答案 1 :(得分:0)
致正在处理此类问题的任何其他人:
@mike-müller 的回答实际上并没有解决这个问题,而且当其他 CSV 阅读器(例如 Excel)读取文件时,文件仍然损坏。您需要在写入文件后而不是在读取文件时修复此问题。
问题在于没有引用包含换行符(\r
、\n
或 \r\n
,具体取决于操作系统样式)的字符串。这不会阻止 CSV 阅读器(例如 Pandas、Excel 等)解析换行符,然后会将加载的 CSV 文件弄乱,使每个未加引号的记录包含多行。
Python 中的通用换行符是 \r\n
,因为您通过这些字符剥离字符串,例如str.strip('\r\n')
。这将使 Python 识别并覆盖所有操作系统换行样式。
在 Pandas 中,通过 line_terminator='\r\n'
读取 CSV 文件会将所有具有 \n
或 \r
的字符串包装成双引号以保留引用并防止读者稍后解析换行符。
仅提供代码:
pd.to_csv('data.csv', line_terminator='\r\n'))