使用 Pandas 动态创建数据框

Posted

技术标签:

【中文标题】使用 Pandas 动态创建数据框【英文标题】:Dynamically creating dataframes with Pandas 【发布时间】:2019-06-28 02:48:17 【问题描述】:

我有一个庞大的数据集,我想根据第一列的字符串值将其拆分为几个较小的数据集。

到目前为止,我已经删除了最终数据帧中不需要的所有信息,并使用数据帧字典动态创建,但无济于事,并创建了拆分。

对于数据框的字典,我试过了:

dict = 
number_of_df= 0

for i in range(df.shape[0]):
    if df[i:] != df[i-1]:
        number_of_df += 1

for i in range(len(number_of_df)):
    d['t' + str(i)] = df.shift(i).add_suffix('_t' + str(i))

并且用于复制行的值,直到行中的第一个值与前一个值不同:

for key in dict:
    while df[i:] == df[i-1:]:
        df[key].append= df2.loc[df1.index[i]] = df1.iloc[i]

    df[key].to_csv('file'+str(key)+'.csv', index=False)

我希望它会创建多个 CSV,每个文件都按照创建顺序命名。我有几个错误,首先它说 Key error: -1 while creating the dictionary 并且只创建一个空的,当切片不返回任何错误但也不向字典写入任何内容时。我还认为我可能会错误地指出要在字典中更改哪些行和值。

提前感谢我的英语,不是母语,也是一个完整的 n00b。

【问题讨论】:

based on the string values of the first column: 你在哪里按代码中的第一列过滤?此外,从不(即使在示例中)使用诸如 dict 之类的内置变量作为变量名。 我想我在第二块的第 3 行进行过滤。对于 900 个实例,这些行具有相同的值。我想复制数据框中的行,直到值不匹配。对不起 dict 的事情,不知道。 为了清楚起见,您想要一个字典 d,其中键是第一列中的 唯一字符串,值是针对相应字符串过滤的数据帧? 我的想法更像是一个数据帧字典(遵循我在另一篇文章中阅读的建议),用于动态创建数据帧。我愿意接受建议。我要解决的问题是将这个大的 CSV 拆分成更小的一个,每个更小的一个包含与第一列中的重复键关联的数据。 好的,字典是可选的,实际上并不是必需的,请参阅我的解决方案。 【参考方案1】:

我想根据字符串值分成几个较小的 第一列。

这比你想象的要容易。只需将groupby 与您的第一列一起使用,然后使用dict + tuple 来构建您的字典。您可以通过索引df.columns 选择第一列。

dct = dict(tuple(df.groupby(df.columns[0])))

如果您需要将每个数据帧导出到 CSV 文件,则不需要额外的字典费用。直接迭代groupby对象即可:

for key, df_slice in df.groupby(df.columns[0]):
    df_slice.to_csv(f'file_key.csv', index=False)

【讨论】:

哇,两行?它奏效了,我真的很感动。这么多要学。谢谢! @AaronGonzález,没问题,如果这有帮助,请不要忘记accept 答案(在左侧打勾)。

以上是关于使用 Pandas 动态创建数据框的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas 数据框中计算动态时间扭曲距离

AJAX如何动态地将行添加到表中

使用数组中的数据动态创建选择框

动态构建大型数据框(spark 或 pandas)以导出到 csv 的方法

如何创建动态数据框

Pandas 数据框将长字符串列动态操作为 2 列