【问题标题】:Proper way of cleaning csv file清理csv文件的正确方法
【发布时间】:2021-12-27 01:21:04
【问题描述】:

我有一个巨大的 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])

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

【问题讨论】:

  • 你真的有/需要行索引,即日期之前的值吗?
  • 这是一个奇怪的文件。它在前两个字段之间有过多的引用和不一致的分隔符。老实说,如果您可以解决该文件的创建方式的问题。

标签: python pandas csv dataset


【解决方案1】:

使用熊猫:

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 %

正如 cmets 中所述,您可能不需要在日期列中使用额外的索引。此外,索引和过度引用表明文件最初没有正确创建,应该修复该过程。

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

【讨论】:

    【解决方案2】:

    您可以使用正则表达式:

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

    测试:

    >>> date
    '2.03.01.18'
    
    >>> ratio
    '+1,63 %'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2018-06-19
      • 2012-11-03
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多