使用 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 动态创建数据框的主要内容,如果未能解决你的问题,请参考以下文章