Pandas:将100多个变量融化为100多个新数据帧

2024-05-19 17:39:08 发布

您现在位置:Python中文网/ 问答频道 /正文

stackoverflow是个新手,如果格式看起来很奇怪,请耐心等待

我有一大组数据,包含100多列数据,结构如下:

countrya countryb年份变量1变量2。。。。。。瓦莱布尔100

我想把100个变量分成100个新的数据帧,并将它们保存到CSV中

下面是我创建1个新csv的代码

dfm1=pd.melt(df, id_vars=['countrya','countryb','year'], value_vars=['variable1'],
         value_name='variable1')
dfm1.drop('variable',axis=1)
dfm1.to_csv('newdf1.csv')

我如何使流程自动化? 谢谢大家!


Tags: csv数据代码value格式varsstackoverflow结构
2条回答

这里有一个方法。首先,创建数据帧

import pandas as pd

df = pd.DataFrame({
    'country_a': [1, 2, 3],
    'country_b': [4, 5, 6],
    'year': [2018, 2019, 2020],
    'var_a': ['a', 'b', 'c'],
    'var_b': ['x', 'y', 'z']
})

print(df)
   country_a  country_b  year var_a var_b
0          1          4  2018     a     x
1          2          5  2019     b     y
2          3          6  2020     c     z

第二,用列名遍历字段

base_fields = df.columns[:3].to_list()    # columns in every file
var_fields = df.columns[3:]               # var_a, var_b, ...

for var_field in var_fields:
    file_name = f'{var_field}.csv'
    with open(file_name, 'wt') as handle:
        fields = base_fields + [var_field]
        df.loc[:, fields].to_csv(handle)
        
        print(f'wrote {fields} to {file_name}')


wrote ['country_a', 'country_b', 'year', 'var_a'] to var_a.csv
wrote ['country_a', 'country_b', 'year', 'var_b'] to var_b.csv
                                          ^              ^
                                          last field and file name change

可以对所有变量使用for循环,并在其中调用函数(假设示例代码正确)

def split(df, variable_name):
  dfm1=pd.melt(df, id_vars=['countrya','countryb',variable_name], value_vars=[variable_name], value_name=variable_name)
  dfm1.drop('variable',axis=1) # I don't know what's this line used for
  dfm1.to_csv('newdf_{}.csv'.format(variable_name))

for variable_name in ['variable1', 'variable2']:
  split(df, variable_name)

相关问题 更多 >