问题描述
stackoverflow还是很新的东西,如果格式看起来很奇怪,请忍受。
我有大量数据,其中包含100列以上的数据,结构如下:
countrya countryb年份变量1变量2 ......变量100
我想将100个变量分成100个新数据帧,然后将它们保存到csvs中。
下面是创建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')
如何使过程自动化? 谢谢!
解决方法
您可以对所有变量使用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)
,
这是一种方法。首先,创建数据框。
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','var_b'] to var_b.csv
^ ^
last field and file name change