在 pd.dataframe 个值对象上使用字典理解
Using dictionary comprehension on pd.dataframe value objects
我有一个字典,其中 pd.DataFrame 个对象作为字典值:
key_names=['country_1','country_2','country_3']
data_1 = [['Alex',10],['Bob',11],['Clarke',4]]
df_1 = pd.DataFrame(data_1,columns=['Name','Age'])
data_2 = [['Tom',13],['Zoe',21],['Tom',13]]
df_2 = pd.DataFrame(data_1,columns=['Name','Age'])
data_3 = [['Felix',16],['Rich',22],['Phil',23]]
df_3 = pd.DataFrame(data_1,columns=['Name','Age'])
dfs=[df_1,df_2,df_3]
wb_dict=dict(zip(key_names,dfs))
我正在尝试将 pd.DataFrame 中的所有文本小写
&我已经成功地使用 for 循环做到了:
for k,v in wb_dict.items():
wb_dict[k]=wb_dict[k].astype(str).apply(lambda x:x.str.lower())
并在字典理解中使用 .apply()
wb_dict= {k: wb_dict[k].astype(str).apply(lambda x:x.str.lower()) for k, v in wb_dict.items()}
但这两种方法似乎都比实际需要的要慢。
我已经尝试避免使用 .apply() ,我认为这会减慢它的速度。我做空了:
{(lambda x:x.str.lower()) for x in wb_dict[k].astype(str) for k, v in wb_dict.items()}
结果是一堆 lambda 函数对象。
您可以使用 assign
覆盖现有的列值。请注意,与您的循环类似,这会使数字列(例如“年龄”)成为 dtype 对象列,这可能不是您想要做的事情。
out = {k: df.assign(**{col: df[col].astype(str).str.lower() for col in df.columns}) for k, df in wb_dict.items()}
输出:
{'country_1': Name Age
0 alex 10
1 bob 11
2 clarke 4,
'country_2': Name Age
0 alex 10
1 bob 11
2 clarke 4,
'country_3': Name Age
0 alex 10
1 bob 11
2 clarke 4}
我有一个字典,其中 pd.DataFrame 个对象作为字典值:
key_names=['country_1','country_2','country_3']
data_1 = [['Alex',10],['Bob',11],['Clarke',4]]
df_1 = pd.DataFrame(data_1,columns=['Name','Age'])
data_2 = [['Tom',13],['Zoe',21],['Tom',13]]
df_2 = pd.DataFrame(data_1,columns=['Name','Age'])
data_3 = [['Felix',16],['Rich',22],['Phil',23]]
df_3 = pd.DataFrame(data_1,columns=['Name','Age'])
dfs=[df_1,df_2,df_3]
wb_dict=dict(zip(key_names,dfs))
我正在尝试将 pd.DataFrame 中的所有文本小写 &我已经成功地使用 for 循环做到了:
for k,v in wb_dict.items():
wb_dict[k]=wb_dict[k].astype(str).apply(lambda x:x.str.lower())
并在字典理解中使用 .apply()
wb_dict= {k: wb_dict[k].astype(str).apply(lambda x:x.str.lower()) for k, v in wb_dict.items()}
但这两种方法似乎都比实际需要的要慢。
我已经尝试避免使用 .apply() ,我认为这会减慢它的速度。我做空了:
{(lambda x:x.str.lower()) for x in wb_dict[k].astype(str) for k, v in wb_dict.items()}
结果是一堆 lambda 函数对象。
您可以使用 assign
覆盖现有的列值。请注意,与您的循环类似,这会使数字列(例如“年龄”)成为 dtype 对象列,这可能不是您想要做的事情。
out = {k: df.assign(**{col: df[col].astype(str).str.lower() for col in df.columns}) for k, df in wb_dict.items()}
输出:
{'country_1': Name Age
0 alex 10
1 bob 11
2 clarke 4,
'country_2': Name Age
0 alex 10
1 bob 11
2 clarke 4,
'country_3': Name Age
0 alex 10
1 bob 11
2 clarke 4}