首先,我搞了个这样的事:
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-08-01 20:50:19 +08:00 via Android
可以通过 globals()注入变量
|
2
arrow8899 2019-08-01 21:04:12 +08:00
```
for key in list(locals().keys()): if key.startswith('pdTable'): locals()[key].rename(columns={'old_name': 'new_name'}) ``` 但是,你为什么需要这样写呢 |
3
qazwsxkevin OP |
4
gsj987 2019-08-01 23:47:35 +08:00
@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-08-01 23:49:57 +08:00
你是不是需要一个 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-08-02 00:25:50 +08:00 via Android
@qazwsxkevin 你和我一定有一个对 c++有什么误解。。
|