在 pandas 数据帧列表上向量化函数
Vectorizing a function on a list of pandas dataframes
我读取了一个 excel 文件并将每个选项卡保存为 pandas 数据框。
import pandas as pd
xla = pd.ExcelFile("file_name.xlsx")
kl=xla.sheet_names
hf_list=[]
for i in range(len(kl)):
hf_list.append(pd.read_excel(xla, i,index_col=0))
我打算计算列表中每个数据帧的排名,因此编写了以下代码。
def score_card(raw_list):
score_list=[]
for i in range(len(raw_list)):
score_list.append(raw_list[i].rank(axis=1))
return score_list
score_list=score_card(hf_list)
我想知道是否有一种方法可以向量化代码并避免 score_card 函数中的 for 循环(以及读取 excel 文件)。
提前感谢您的宝贵时间。
如果在 read_excel
中使用参数 sheet_name = None
获取每个工作表名称的 DataFrame 的 orderdict:
dfs = pd.read_excel("file_name.xlsx", sheet_name = None, index_col=0)
然后使用列表理解:
score_list = [v.rank(axis=1) for k, v in dfs.items()]
或者用 concat
创建大 DataFrame:
df = pd.concat(dfs.values())
我读取了一个 excel 文件并将每个选项卡保存为 pandas 数据框。
import pandas as pd
xla = pd.ExcelFile("file_name.xlsx")
kl=xla.sheet_names
hf_list=[]
for i in range(len(kl)):
hf_list.append(pd.read_excel(xla, i,index_col=0))
我打算计算列表中每个数据帧的排名,因此编写了以下代码。
def score_card(raw_list):
score_list=[]
for i in range(len(raw_list)):
score_list.append(raw_list[i].rank(axis=1))
return score_list
score_list=score_card(hf_list)
我想知道是否有一种方法可以向量化代码并避免 score_card 函数中的 for 循环(以及读取 excel 文件)。 提前感谢您的宝贵时间。
如果在 read_excel
中使用参数 sheet_name = None
获取每个工作表名称的 DataFrame 的 orderdict:
dfs = pd.read_excel("file_name.xlsx", sheet_name = None, index_col=0)
然后使用列表理解:
score_list = [v.rank(axis=1) for k, v in dfs.items()]
或者用 concat
创建大 DataFrame:
df = pd.concat(dfs.values())