【问题标题】:How to clean up extra heading info in middle of csv with pandas如何用熊猫清理csv中间的额外标题信息
【发布时间】:2020-06-05 18:09:57
【问题描述】:

我有一个 csv 文件,我正在尝试将其转换为数据框。但是数据有一些重复的额外标题材料。例如:

Results Generated Date Time  
Sampling Info  
Time; Data  
1; 4.0  
2; 5.2  
3; 6.1  

Results Generated Date Time  
Sampling Info   
Time; Data  
6; 3.2   
7; 4.1   
8; 9.7    

如果是干净的 csv 文件,没有额外的标题材料,我正在使用

df = pd.read_csv(r'Filelocation', sep=';', skiprows=2)  

但我不知道如何删除第二组标题信息。我不想丢失第二个标题集下面的数据。有没有办法删除它以便数据干净?第二个标头集并不总是在同一位置(基本上是数据采集错误)。
谢谢!

【问题讨论】:

标签: python pandas data-cleaning


【解决方案1】:
import pandas as pd

filename = 'filename.csv'
lines =open(filename).read().split('\n')   # reading the csv file

list_ = [e for e in lines if e!='' ]  # removing '' characters from lines list

list_ = [e for e in list_ if e[0].isdigit()]  # removing string starting with non-numeric characters 

Time = [float(i.split(';')[0]) for i in list_]   # use int or float depending upon the requirements

Data = [float(i.split(';')[1].strip()) for i in list_]


df = pd.DataFrame({'Time':Time, 'Data':Data})    #making the dataframe 
df

我希望这会成功!

【讨论】:

    【解决方案2】:

    尝试在第一个数据块之后拆分您的文本文件。然后你可以用它制作两个数据框并将它们连接起来。

    with open("yourfile.txt", 'r') as f:
        content = f.read()
    
    # Make a list of subcontent
    splitContent = content.split('Results Generated Date Time\nSampling Info\n')
    

    使用“Results Generated Date Time\nSampling Info\n”作为 split 的参数,也会删除这些行 - 这仅在不必要的标题行始终相等时才有效!

    在此之后,您将获得由分隔符 (';') 分隔的字符串形式的数据列表(变量:splitContent)。 使用此答案从字符串创建数据帧:https://stackoverflow.com/a/22605281/11005812

    另一种方法是将每个子内容保存为自己的文件并再次读取。

    连接数据帧:https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 2018-01-09
      • 2022-01-01
      • 2018-07-17
      • 2015-12-21
      • 2019-07-26
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多