python - pandas read_csv 仅在打开 csv 并将其再次保存为 csv 后才有效
问题描述
我从网站下载了一个 csv,但使用 pandas.read_csv 读取它时遇到问题。CSV 的结构看起来像这样:
I K L
A abcdefg. -,01 10,5
B hijkl -,01 12,3
C mnop 14,0
D NaN -0,2
我只有在手动打开 csv 并将文件再次保存为 csv 后才能得到正确的输出。
original = pd.read_csv('original.csv', sep=';', decimal=",")
saved_again = pd.read_csv('saved_again.csv', sep=';', decimal=",")
print(original)
I Unnamed: 1 Unnamed: 2
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
print(saved_again)
I K L
0 A abcdefg. -,01 10.5
1 B hijkl -,01 12.3
2 C mnop 14.0
3 D NaN -0.2
有没有人知道如何解决这个问题或如何自动将 csv 保存为 csv?
解决方案
我找到了解决方案。requests.get().text 返回一个包含 '\x00\x00\x00' 的字符串:
text = requests.get('www.website.csv').text
print(text)
I\x00\x00\x00;\x00\x00\x00K\x00\x00\x00;\x00\x00\x00L\x00\x00\x00\n\x00\x00\x00A\x00\x00\x00;\x00\x00\x00abcdefg. -,01\x00\x00\x00;\x00\x00\x0010,5\x00\x00\x00\n\x00\x00\x00B\x00\x00\x00;\x00\x00\x00hijkl -,01\x00\x00\x00;\x00\x00\x0012,3\x00\x00\x00\n\x00\x00\x00C\x00\x00\x00;\x00\x00\x00mnop\x00\x00\x00;\x00\x00\x0014,0\x00\x00\x00\n\x00\x00\x00D\x00\x00\x00;\x00\x00\x00NaN\x00\x00\x00;\x00\x00\x00-0,2
print(text.replace('\x00',''))
I;K;L
A;abcdefg. -,01;10,5
B;hijkl -,01;12,3
C;mnop;14,0
D;NaN;-0,2
然后我创建了一个数据框并将其保存为 csv:
lines = text.replace('\x00','').split('\n')
data = []
for count, line in enumerate(lines):
if count == 0:
columns = line.split(';')
else:
data.append(line.split(';'))
df = pd.DataFrame(data,columns=columns)
df['L'] = df['L'].str.replace(',','.').astype(float)
df.to_csv('example.csv')
这可能不是最聪明的方法,但它确实有效。