【问题标题】:How do I append data into a DataFrame如何将数据附加到 DataFrame
【发布时间】:2019-01-24 13:48:02
【问题描述】:

如何计算 DataFrame 中的每个组,然后将组计数附加到 Summary DataFrame 中?

我对 Python 很陌生

我设置了一个空的DataFrame

Counts_data=pd.DataFrame(columns=['filename','Green','Stubble','Baresoil','Stones','Shadow'])

然后我开始一个 For 循环遍历图像 在循环内部,我创建了一个 RGBgroups 的 DataFrame。(通过 knn 模型从像素 RGB 预测的结果)

df_img_pred=pd.DataFrame(knn.predict(df_img_data),columns=['RGBgroup'])
print(df_img_pred.head())
Img_counts=df_img_pred.stack().value_counts()

输出是

 RGBgroup
0  BareSoil
1   Stubble
2   Stubble
3   Stubble
4  BareSoil
BareSoil    56507
Stubble     52751
Shadow       5030
Stones       4267
Green         245
dtype: int64

我想计算每个组并将结果与​​图像的文件名一起附加到“Counts_data”数据框中。我尝试了多种过滤、计数和追加的方法,但我无法让它发挥作用。

任何帮助将不胜感激。

【问题讨论】:

  • 请提供最少的数据 (csv)。见this guide
  • 如何附加文件?
  • 您不需要附加文件。发布一个最小的文本表格,以便我们了解您的数据是什么样的。
  • RGBgroup 0 茬 1 BareSoil 2 茬 3 茬 4 BareSoil 5 BareSoil 6 BareSoil 7 茬 8 BareSoil 9 茬 10 茬 11 茬 12 茬 13 BareSoil 14 BareSoil 15 茬 16 茬 19 茬 18 茬是前 2 行数据。这个文件只有 Stubble 和 Baresoil,还可能有 Green、Stones 和 Shadow。总行数为 118800。谢谢
  • 你能看懂这个吗?我不能。

标签: python pandas dataframe


【解决方案1】:

您应该创建一个列表,将每个新输出附加到它,完成后将列表转换为DataFrame。增长DataFrame 是非常昂贵的操作。

如果您只需要一个简单的计数,请考虑使用来自collections 模块的Counter

【讨论】:

  • 您是否介意提供一些解释或参考,说明为什么增长数据帧是一项昂贵的操作?
  • 这是关于内存安排的。 DF 中列(系列)中的元素必须相邻。所以向 DF 添加一行实际上是复制它的所有内容。请参阅this 了解更多信息。
  • 请告诉我如何做到这一点,我愿意接受任何建议,循环将遍历 100 个图像文件。我对最终结果感兴趣的摘要文件包含所有图像文件以及 5 个不同组的计数。
【解决方案2】:

您可以一次性创建数据框:

# list append is much more efficient
# than operating a dataframe
s = []
for row in stat_df:
    s.append(row)

# create a dataframe
labels = ['file1', 'file2', 'file3']
df = pd.DataFrame(s, columns=labels)

您可以将stat_df 替换为您的预测df,并相应地创建标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2019-03-22
    • 2018-07-15
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多