【问题标题】:Creating multiple panda strings创建多个熊猫字符串
【发布时间】:2021-07-07 10:21:05
【问题描述】:

早安社区,

我的目标是将我每天执行的实验中的数据可视化(这是,我想绘制它)。

我希望只使用一个 CSV 及其数据,然后每行添加我执行实验的日期。 问题是,我每天都有多行数据。 最后,我希望将数据可视化,并且每个日期都有不同的颜色或只是不同的标签(我不知道这是否真的可能,我说的是 20 个不同的日子)。

我相信我必须创建一个解析此 CSV 的 Python,然后按每个日期拆分此 CSV。

例如,我有一个包含这些数据的 csv:

P1 P2 Date
1 2 1
2 3 1
3 2 2
4 3 2

所以我用这个命令读取了 csv:

x = pd.read_csv ( 'prova.csv' , sep = ';' )

然后当我想创建每个数据帧时,我看到它并没有创建一组数据帧,而是只有一个名为“nom”的数据帧:

final_date = x.Date.iloc[-1]
for i in range(final_date):

    nom = "date_"+ '{}'.format(i)
    nom = DataFrame()
    nom = x[( x['Date'] == i )]

我的python应该怎么做?

非常感谢!

【问题讨论】:

  • 我不确定为什么可以从像这样的单独数据帧中获得。你为什么要和他们一起做?
  • 稍后我想绘制它们。我觉得我必须这样做,因为这是我每天工作的 Csv,每天我都会进行新的实验。因此,我只需添加我的新数据及其日期,然后我就不必担心添加新的 csv。
  • 但是你为什么认为你需要单独的数据框呢?您可以只使用带有日期列的单个数据框,不是吗?抱歉,我可能在这里遗漏了一些东西
  • 是的,亲爱的 Cimbali,我已经重发了我的目的。我不需要分离数据帧,我只是相信我必须这样做,但这就是我如何弄清楚如何在每个日期绘制每组数据
  • 在循环中你设置了相同的变量,所以最后只有 nom

标签: python pandas


【解决方案1】:

这里的基本情况是,您为所有数据帧使用一个名称 nom。一旦您构建另一个数据框,前一个数据框就会被替换。

现在您可以使用数据框字典:

final_date = x.Date.iloc[-1]
por_fecha = {}

for i in range(final_date + 1):
    por_fecha['date_{}'.format(i)] = x[( x['Date'] == i )]

然后返回以下字典:

{
'date_0':
  Empty DataFrame
  Columns: [P1, P2, Date]
  Index: [],
'date_1':
      P1  P2  Date
  0   1   2     1
  1   2   3     1,
'date_2':
      P1  P2  Date
  2   3   2     2
  3   4   3     2
}

分隔每个日期的更简单方法是使用groupby(另请参阅this very interesting guide on groupby usage

在这里,我们将使用与 split-apply-combine 模式略有不同的方式,因为一旦您定义了组(按日期值),您就可以使用 groupby(...).groups 访问字典:

>>> x.groupby('Date').groups
{1: [0, 1], 2: [2, 3]}

您会看到您的方法的 2 个首要优势

  1. 这不会使用 0..2 范围内的所有数字(或您使用的任何日期范围),只使用存在的日期
  2. 字典的值是行索引,所以现在您可以在循环中使用它们,如下所示:
for date, idx in x.groupby('Date').groups.items():
    # Access only the subset with that date
    y = x.loc[idx]
    # Now plot y with date 
    y.plot(..., title='date {}'.format(date))

【讨论】:

  • 谢谢亲爱的 Cimbali!我不知道这个DataFrame字典的存在......要学习的东西太多了!但我相信这个 groupby 是不可思议的,谢谢你给我看这个!
  • 亲爱的 Cimbali,我正在尝试您的最后一个代码,但我不断收到此错误:TypeError: cannot unpack non-iterable int object。任何线索为什么它在 x.groupby('Date').groups 中不喜欢这个?
  • 啊是的@LlorençMaciàCid 它缺少.items() - 你可以再试一次 我修复了代码。
  • 亲爱的 Cimbali,如果我想为每个 y.plot 打印 P1 和 P2,你能告诉我该怎么做吗?我正在尝试 "" y.plot(y.p1, y.p2, title='date {}'.format(data)) "" 但它不起作用
  • @LlorençMaciàCid 试试y.plot(x='p1', y='p2'),更多详情请参阅the plot() documentation
猜你喜欢
  • 2018-11-23
  • 2018-11-03
  • 2023-01-11
  • 2019-07-24
  • 2021-12-24
  • 2021-09-28
  • 2020-07-11
  • 2021-09-21
  • 1970-01-01
相关资源
最近更新 更多