清理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
,这可能不是您想要的...
我有一个巨大的 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
,这可能不是您想要的...