【问题标题】:How to set the names of columns in dataframe when merging several dataframes together?将多个数据框合并在一起时如何设置数据框中列的名称?
【发布时间】:2023-04-03 05:27:01
【问题描述】:

我有几个作为数据框读取的 CSV 文件。 我需要创建一个数据框,其中包含来自 CSV 文件的所有这些数据,并具有适当的列名称。

我找到了这个解决方案:

import pandas as pd
import glob

path = r'F:\\df_freeq_new_mostfreqpart\\' # use your path
all_files = glob.glob(path + "/*.csv")

li = []

for filename in all_files:
    df = pd.read_csv(filename, sep = ";", index_col=None, usecols = 
    ['Unnamed: 0','counter_routes', 'percent_availability'])
    df.rename( columns={'Unnamed: 0':'meters'}, inplace=True )
    df = df[df.counter_routes>0]
    li.append(df)

frame = pd.concat(li, axis=1, ignore_index=True)

我收到了包含所有数据的数据框,但我不知道如何设置列的名称而不是数字:1,2,3.. 我想实现下一个: 列的原始名称 + 原始 CSV 文件名称中的数字。 CSV文件名称示例:

"dfFrequeny100_56"

对于这个文件,我需要有如下列:

'counter_routes_56', 'percent_availability_56'

我将不胜感激。

【问题讨论】:

    标签: python-3.x pandas multiple-columns concat


    【解决方案1】:

    我相信您需要在 _ 之后使用拆分值并通过 += 添加到原始列名称:

    for filename in all_files:
        df = pd.read_csv(filename, sep = ";", index_col=None, usecols = 
        ['Unnamed: 0','counter_routes', 'percent_availability'])
        df.rename( columns={'Unnamed: 0':'meters'}, inplace=True )
        df = df[df.counter_routes>0]
        df.columns += '_' + filename.split('_')[1].split('.')[0]
        print (df.head())
        li.append(df)
    

    【讨论】:

    • 我尝试了这个解决方案并且出现了这个错误:AttributeError: 'str' object has no attribute 'str'
    • 糟糕,需要df.columns += '_' + filename.split('_')[1].split('.')[0] 而不是df.columns += '_' + filename.str.split('_')[1].split('.')[0]
    • @KaterynaLubyk - 我在设置列名之前更改了 df = df[df.counter_routes>0] 并添加了 print (df.head()),你能检查一下吗?
    • 是的,我也做过。当我在 for 循环中执行 print (df.head()) 时,它具有正确的列名称。但最后,frame 有列的数字名称
    • @jezrael 现在正在运行,非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2017-10-21
    相关资源
    最近更新 更多