
首先,我搞了个这样的事:
pdTable1 = pd.DataFrame() pdTable2 = pd.DataFrame() pdTable3 = pd.DataFrame() pdTable4 = pd.DataFrame() pdTable5 = pd.DataFrame() pdTable6 = pd.DataFrame() 然后我弄了个事,把这 6 个 df 都放了内容,要进行统一改列名,原本我是这么做的:
pdTable1.rename(columns={ 'A': 'AA', 'B': 'BBB', 'C': 'CC', 'D': 'DDD', 'E': 'EE', 'F': 'FFF', 'G': 'GG', 'H': 'HHH', 'I': 'II', 'J': 'JJJ', 'K': 'KK', }, inplace=True) 有多少 df,代码就写满多少个......,能完成达到目标就好,其它不管了
df 增多了,列名又要变化的时候,就觉得这是个事了...
但小弟对 python 是辅助工具态度,不是饭碗态度(我不能算是职业程序员),没有过于深入了解基本功,
所以想请教一下大神们,我觉得应该是可以做一个循环,来批量处理么? for?? 还是有更高阶的套路?
每个 df 变量名之间的区别,最后 1、2、3、4、5、6...N 不同而已...
1 BingoXuan 2019 年 8 月 1 日 via Android 可以通过 globals()注入变量 |
2 arrow8899 2019 年 8 月 1 日 ``` for key in list(locals().keys()): if key.startswith('pdTable'): locals()[key].rename(columns={'old_name': 'new_name'}) ``` 但是,你为什么需要这样写呢 |
3 qazwsxkevin OP |
4 gsj987 2019 年 8 月 1 日 @qazwsxkevin 就是循环生成规律变量名的变量并赋值是吗?就用反射好了 方法 1,对当前 module/class 使用 setattr ``` >>>import sys >>>thismodule = sys.modules[__name__] >>>setattr(thismodule, 'table1', 1) >>> table1 1 ``` 方法 2,使用 vars()或者 2L 说的 globals() #前者是当前 module,后者是全局 ``` >>> vars()['table2']=2 >>> table2 2 ``` |
5 Vinty 2019 年 8 月 1 日 你是不是需要一个 df 的 list dfs = [pd.Dataframe() for i in range(n)] 对 list 的元素批量操作可以用 map rename_col = lambda x: x.rename(columns={ 'A': 'AA', }, inplace=True) map(rename_col, dfs) |
6 widewing 2019 年 8 月 2 日 via Android @qazwsxkevin 你和我一定有一个对 c++有什么误解。。 |