【问题标题】:Creating Empty Data Frame and adding Rows to it创建空数据框并向其中添加行
【发布时间】:2019-07-13 16:32:39
【问题描述】:

我正在尝试使用具有两列 (['originating_number','terminating_number'] 的 pandas 的空数据框。创建这个新的空数据框后,我的目标是遍历我拥有的另一个数据框如果满足某些条件,则向这个新的空数据框添加一行。不幸的是,我遇到了一个障碍,要么初始化空数据框,要么添加它。这是我当前的代码(其中记录代表我的其他数据框我正在使用):

    verified_frame = pd.DataFrame(columns=['originating_number_2', 'terminating_number_2'])

    for index, row in records.iterrows():
        originating_number_length = len(str(row['originating_number']))
        terminating_number_length = len(str(row['terminating_number']))

        if originating_number_length == 10 and terminating_number_length == 10:

            temp_df = pd.DataFrame([row['originating_number'],row['terminating_number']])
            verified_frame.append(temp_df)

但是,当我在此代码之后(在 if 块中)设置跟踪时,我可以看到我的 temp_df 具有正确的值,但是当我查看 verify_frame 时,这些值尚未添加。

感谢您的帮助!

【问题讨论】:

    标签: python pandas dataframe initialization append


    【解决方案1】:

    如果您只需要根据条件从原始帧中过滤掉行,您可以直接这样做,而不是遍历每一行:

    verified_frame  = records[(records['originating_number'] == 10) & (records['terminating_number'] == 10)]['originating_number', 'terminating_number']
    verified_frame.columns = ['originating_number_2', 'terminating_number_2']
    

    遍历数据帧行效率不高,应始终将其视为最后一个选项。

    【讨论】:

      【解决方案2】:

      我想你快到了,你只需要将新的verfied_frame 分配给它附加的自我。试试这个:

      verified_frame = pd.DataFrame(columns=['originating_number_2', 'terminating_number_2'])
      
      for index, row in records.iterrows():
          originating_number_length = len(str(row['originating_number']))
          terminating_number_length = len(str(row['terminating_number']))
      
          if originating_number_length == 10 and terminating_number_length == 10:
      
              temp_df = pd.DataFrame([row['originating_number'],row['terminating_number']])
      
      # reassign verfied_frame here
              verified_frame = verified_frame.append(temp_df)
      

      这是支持此https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html的文档

      【讨论】:

      • 是的,通过重新分配verified_frame,我可以在set_trace() 中看到temp_df 正在添加到verified_frame。但是,它错误地将数据添加到一个全新的列而不是原来的两列,所以这是我的下一个任务。感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      相关资源
      最近更新 更多