社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Diana Vega • 4 年前 • 1004 次点击  

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

我有 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
 
1004 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Mike
Reply   •   1 楼
Mike    5 年前

您将分配给您的循环变量,然后在下一个复飞时将其丢弃。 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    5 年前
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    5 年前

如果我理解正确,你可以使用 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)