【问题标题】:How to remove multiple headers from dataframe and keeps just the first python如何从数据框中删除多个标头并仅保留第一个 python
【发布时间】:2017-09-01 16:05:06
【问题描述】:

我正在处理一个显示多个标题的 csv 文件,所有标题都像本例一样重复:

1                     2     3   4
0            POSITION_T  PROB  ID  
1                 2.385   2.0   1  
2            POSITION_T  PROB  ID 
3                 3.074   6.0   3  
4                 6.731   8.0   4    
6            POSITION_T  PROB  ID  
7                12.508   2.0   1  
8                12.932   4.0   2  
9                12.985   4.0   2  

我想删除重复的标题以获得这样的最终文档:

0            POSITION_T  PROB  ID  
1                 2.385   2.0   1   
3                 3.074   6.0   3  
4                 6.731   8.0   4     
7                12.508   2.0   1  
8                12.932   4.0   2  
9                12.985   4.0   2  

我尝试删除这些标题的方法是使用:

df1 = [df!='POSITION_T'][df!='PROB'][df!='ID']

但这会产生错误TypeError: Could not compare ['TRACK_ID'] with block values 一些想法?提前致谢!

【问题讨论】:

  • 实际的文本文件是什么样的?

标签: python pandas dataframe


【解决方案1】:

按字段值过滤:

df = pd.read_table('yourfile.csv', header=None, delim_whitespace=True, skiprows=1)
df.columns = ['0','POSITION_T','PROB','ID']
del df['0']

# filtering out the rows with `POSITION_T` value in corresponding column
df = df[df.POSITION_T.str.contains('POSITION_T') == False]

print(df)

输出:

  POSITION_T PROB ID
1      2.385  2.0  1
3      3.074  6.0  3
4      6.731  8.0  4
6     12.508  2.0  1
7     12.932  4.0  2
8     12.985  4.0  2

【讨论】:

【解决方案2】:

这并不理想!解决这个问题的最好方法是在文件解析中处理它。

mask = df.iloc[:, 0] == 'POSITION_T'
d1 = df[~mask]
d1.columns = df.loc[mask.idxmax].values

d1 = d1.apply(pd.to_numeric, errors='ignore')
d1

   POSITION_T  PROB  ID
1                      
1       2.385   2.0   1
3       3.074   6.0   3
4       6.731   8.0   4
7      12.508   2.0   1
8      12.932   4.0   2
9      12.985   4.0   2

【讨论】:

【解决方案3】:
past_data=pd.read_csv("book.csv")

past_data = past_data[past_data.LAT.astype(str).str.contains('LAT') == False]

print(past_data)
  1. 替换 CSV(此处:book.csv)
  2. 替换您的变量名(此处:past_data)
  3. 将所有 LAT 替换为您的任何列名
  4. 就是这样/您的多个标题将被删除

【讨论】:

    【解决方案4】:

    仅保留底层列名:

    df.columns=[multicols[-1] for multicols in df.columns]
    

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2020-12-29
      • 2016-10-23
      • 2021-12-30
      相关资源
      最近更新 更多