如何用熊猫清理csv中间的多余标题信息

问题描述 投票:1回答:2

我有一个要转换成数据帧的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
2个回答
0
投票

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

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')

使用“结果生成的日期时间\ n采样信息\ n”作为拆分参数,也会删除这些行-仅在不必要的标题行始终相等的情况下才有效!

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

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

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


0
投票
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_ = [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

我希望这能完成工作!

© www.soinside.com 2019 - 2024. All rights reserved.