清理csv文件的正确方法

Proper way of cleaning csv file

我有一个巨大的 CSV 文件,如下所示:

1. 02.01.18;"""2,871""";"""2,915""";"""2,871""";"""2,878""";"""+1,66 %""";"""57.554""";"""166.075 EUR""";"""0,044"""
2. 03.01.18;"""2,875""";"""2,965""";"""2,875""";"""2,925""";"""+1,63 %""";"""39.116""";"""114.441 EUR""";"""0,090"""
3. 04.01.18;"""2,915""";"""3,005""";"""2,915""";"""2,988""";"""+2,15 %""";"""58.570""";"""174.168 EUR""";"""0,090"""

最后我只想提取日期和比例。数据集应如下所示:

1.02.01.18, +1,66 %
2.03.01.18, +1,63 %
3.04.01.18, +2,15 %

我试过了,直到现在我遇到了更多麻烦:

import pandas as pd
df = pd.read_csv("Dataset.csv", nrows=0)
print(df)
data = []
for response in df:
    data.append(
       response.split(';')
    )
print(data[0])

您知道清理此数据集的更好方法吗?

您可以为此使用正则表达式:

regex = re.compile(r'([\d\. ]+).*([+-][\d, %]+)')
date, ratio = regex.match(s).groups()
date = date.replace(' ', '')

测试:

>>> date
'2.03.01.18'

>>> ratio
'+1,63 %'

使用pandas:

import pandas as pd

df = pd.read_csv('data.csv', sep=';', usecols=[0,5], names=['date', 'rate'])
df.rate = df.rate.str.strip('"')
print(df)

结果:

          date     rate
0  1. 02.01.18  +1,66 %
1  2. 03.01.18  +1,63 %
2  3. 04.01.18  +2,15 %

如评论中所述,您可能不需要日期列中的额外索引。此外,索引和过多的引用表明文件一开始就没有正确创建,应该修复这个过程。

请注意,现在两列的类型都是 str,这可能不是您想要的...