【问题标题】:zero index for all rows in python dataframepython数据框中所有行的零索引
【发布时间】:2016-12-23 22:03:25
【问题描述】:

我在索引 python dataframe 时遇到问题。我有数据框,我用循环填充它。我这样简化了:

d = pd.DataFrame(columns=['img', 'time', 'key'])
for i in range(5):
    image = i
    timepoint = i+1
    key = i+2
    temp = pd.DataFrame({'img':[image], 'timepoint':[timepoint], 'key': [key]})
    d = pd.concat([d, temp])

问题是因为它将0 显示为所有行的索引,我无法访问基于.loc[] 的特定行。有人知道如何解决问题并获得正常的索引列吗?

【问题讨论】:

    标签: python python-3.x pandas indexing dataframe


    【解决方案1】:

    您可能希望在串联中使用ignore_index 参数:

    d = pd.concat([d, temp], ignore_index=True)
    

    这给了我以下结果:

       img  key time  timepoint
    0  0.0  2.0  NaN        1.0
    1  1.0  3.0  NaN        2.0
    2  2.0  4.0  NaN        3.0
    3  3.0  5.0  NaN        4.0
    4  4.0  6.0  NaN        5.0
    

    【讨论】:

      【解决方案2】:
      d = d.reset_index(drop=True)
      

      PS:最好的做法是制作一个行列表,然后将其转换为 DataFrame,这样计算成本要低得多,而且它会立即生成一个好的索引。

      此列表可以是与 DataFrame init 中的列组合的列表列表,也可以是以列名作为键的字典列表。在你的情况下:

      list_of_dicts = []
      for i in range(5):
          new_row = {'img': i, 'time': i+1, 'key': i+2}
          list_of_dicts.append(new_row)
      d = pd.DataFrame(new_row)
      

      【讨论】:

      • 实际上,我正在寻找更好的方法来创建数据框,但我不知道你所说的制作行列表是什么意思。
      【解决方案3】:

      我认为最好先用值填充lists,然后使用DataFrame构造函数:

      image, timepoint, key = [],[],[]
      for i in range(5):
          image.append(i)
          timepoint.append(i+1)
          key.append(i+2)
      
      d = pd.DataFrame({'img':image, 'time':timepoint, 'key': key})
      print (d)
         img  key  time
      0    0    2     1
      1    1    3     2
      2    2    4     3
      3    3    5     4
      4    4    6     5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-08
        • 1970-01-01
        • 2021-08-23
        • 2020-07-30
        • 2011-12-02
        • 2018-10-05
        • 2017-10-31
        • 2014-04-02
        相关资源
        最近更新 更多