我有一个n行的文件。我正在读取文件并将其分配给数据框df
。列名称之一是curr_state
。基于curr_state
,我想为每个特定的curr_state
创建不同的输出文件。输出文件必须遵循特定的名称约定。我使用以下代码单独完成了此操作:
#curr_state: curr.state
#to extract rows that contain current state "curr.state"
CurrStateName= (df.loc[df['curr_state'] == 'curr.state'])
#naming convention
OutputCurrStateName = "abc_" +str(Client) + "_" + str(Channel) + "_" + "CurrStateName" + "_" + str(filedate) + ".csv"
#output file to a csv file
CurrStateName.to_csv(OutputCurrStateName, sep=',', encoding='utf-8', index=False)
但是,我希望读取另一个包含curr_state
列表和与该CurrStateName
相对应的curr_state
的csv文件,并在循环中创建具有命名约定的输出文件。 / p>
包含curr_state的文件
curr_state. CurrStateName
hello.attempt HelloAttempt
Goodbye.attempt GoodbyeAttempt
我该怎么做?
答案 0 :(得分:0)
不建议使用动态命名的变量。它们难以跟踪,名称空间混乱,导致错误。相反,您可以对GroupBy
使用字典理解。
例如,使用f字符串(Python 3.6+),并假设您指定了字符串Client
,Channel
和filedate
:
d = {f'abc_{Client}_{Channel}_{state}_{filedate}': df_state \
for state, df_state in df.groupby('curr_state')}
然后,您可以通过迭代数据帧字典来输出CSV文件:
for k, v in d.items():
v.to_csv(f'{k}.csv', sep=',', encoding='utf-8', index=False)