首页 > 解决方案 > 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?

标签: pythonpandascsv

解决方案


我找到了解决方案。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')

这可能不是最聪明的方法,但它确实有效。


推荐阅读