【问题标题】:Pandas Dataframe Append or Set_ValuePandas Dataframe Append 或 Set_Value
【发布时间】:2013-06-07 21:58:17
【问题描述】:

我正在尝试遍历包含一些数字并希望保存到数据框的列表。

但是在尝试了set_valuesconcat 之后(这更加困难)。我无法获得合适的分辨率。另一个问题是它必须在读取“END”之前停止......

列表和DataFrame如下:

words= ['302', '1208', '1208', '0', '179', '1208', '1208', '0', '904', '233', '233', '0', '***END', 'OF', 'REPORT***']

dd = pd.DataFrame(columns=("AA","BB","CC","DD"))

还有我目前使用的代码:

for r in range(40,48,4):
    for s in range(41,49,4):
        for t in range(42,50,4):
            for z in range(43,51,4):
                dd = dd.set_value(len(dd),'AA',words[r])
                dd = dd.set_value(len(dd),'BB',words[s])
                dd = dd.set_value(len(dd),'CC',words[t])
                dd = dd.set_value(len(dd),'DD',words[z])

我想返回如下内容:

AA | BB | CC | DD |    
302|1208|1208|0   |

【问题讨论】:

    标签: python append pandas dataframe


    【解决方案1】:

    对我来说,concat 是最后的手段。它不可避免地会长毛。而且,就其价值而言,我认为我从未使用过 set_value —— 很少需要如此细化。

    这是一个解决方案。

    In [10]: numbers = np.array(words[:words.index('***END')]).astype('int')
    
    In [11]: columns = ['AA', 'BB', 'CC', 'DD']
    
    In [12]: dd = DataFrame(numbers.reshape(-1, 4), columns=columns)
    
    In [13]: dd
    Out[13]: 
        AA    BB    CC  DD
    0  302  1208  1208   0
    1  179  1208  1208   0
    2  904   233   233   0
    

    (如果-1 对您来说是新的,请参阅documentation for reshape。)

    【讨论】:

    • 同意...如果您使用的是 for 循环,您可能做错了。 :)
    • 非常简洁优雅的方法。与擅长从空格或逗号分隔文件读取和存储数据的传统软件相比,这将是一个巨大的胜利。
    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多