Py学习  »  Python

如何在python中使用for循环创建多个数据帧

Diana Vega • 4 年前 • 952 次点击  

我尝试创建多个数据文件,它们是现有数据文件的子集。

我有 df_list 实际上是一个数据集列表:

df_list = [df1B, df2B, df3B, df4B, df5B, df6B, df7B, df8B, df9B, df10B, df11B, df12B, df13B, df14B, df15B, df16B, df17B, df18B, df19B, df20B, df21B, df22B, df23B, df24B, df25B, df26B, df27B, df28B, df30B, df31B, df32B, df33B, df34B, df35B]

如果我想创建单个数据集的一个子集,我会这样做,它会工作:

df2B = df2B.groupby(['Location']).get_group(36)

它接受数字为36的所有位置,但是当我尝试对for循环中的所有数据集执行此操作时,它不起作用

for df in df_list:
    df = df.groupby(['Location']).get_group(36)

但这并不是每个数据集都能做到的。它不显示任何错误消息,但也不执行任何其他操作:(

我应该写同样的行35次吗???我希望我有更好的选择。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46220
 
952 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Mike
Reply   •   1 楼
Mike    4 年前

您将分配给您的循环变量,然后在下一个复飞时将其丢弃。 DataFrame.append 不是 inplace ,并且没有 原地 参数。而是:

df1 = pd.DataFrame({'gr': [1,1,2,2], 'v': [1,2,3,2]})
df2 = pd.DataFrame({'gr': [1,1,2,2], 'v': [6,5,4,3]})
df_combined = pd.DataFrame({'gr': [], 'v':[]})
df_combined
Empty DataFrame
Columns: [gr, v]
Index: []
for df in [df1, df2]:
    df_combined = df_combined.append(df.groupby('gr').get_group(1))
df_combined
#     gr    v
# 0  1.0  1.0
# 1  1.0  2.0
# 0  1.0  6.0
# 1  1.0  5.0

除非你想要一个数据帧列表,它突然看起来像你想要的。(我被 df.append() . 对于一个 list , append 添加到适当的末端。对于数据帧,则不是。在列表中,您需要:

# setup as before
combined_dfs = []
for df in [df1, df2]:
    combined_dfs = df_combined.append(df.groupby('gr').get_group(1))

这是一个有趣的方式使用数据帧,但你去!D

mujjiga
Reply   •   2 楼
mujjiga    4 年前
df = [pd.DataFrame({'Location': np.random.randint(0,5,size=(100))}) for i in range(10)]
df = list(map(lambda x: x.groupby('Location').get_group(1), df))
gmds
Reply   •   3 楼
gmds    4 年前

如果我理解正确,你可以使用 list 对此的理解:

subset_df_list = [df.groupby('Location').get_group(36) for df in df_list]

作为旁白,你的 for 循环不起作用,因为你一直在给 df . 你可能想要这个,这也相当于上面的理解:

subset_df_list = []

for df in df_list:
    subset_df = df.groupby('Location').get_group(36)
    subset_df_list.append(subset_df)