【问题标题】:How to call the index value of the data frame as an arg in apply function with python-pandas?python - 如何在python-pandas的apply函数中调用数据框的索引值作为arg?
【发布时间】:2016-04-27 08:34:55
【问题描述】:

我有一个数据框df,格式如下:

        text
0       hi john
1       how are you
2       666
3       so crazy
...

我希望将每一行一一写在不同的文件中,以索引号作为文件名。比如'hi john'应该写成0.txt

给定函数:

def writeText(text, index):
    with open(str(number)+'.txt', 'w+') as f:
        f.write(text)

现在我需要将apply 发送到df

df.apply(writeText, args=(??????, ))

我应该将什么参数传递给函数以便可以使用索引号?提前致谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我认为您可以先将text 列转换为values,然后在循环中使用numpy.ndarray.tofile 写入数据:

    print df
    
              text
    0      hi john
    1  how are you
    2          666
    3     so crazy
    
    for row in df.text.reset_index().values:
        print row
        row[1:].tofile(str(row[0])+'.txt', sep="\t", format="%s")
    
        [0L 'hi john']
        [1L 'how are you']
        [2L '666']
        [3L 'so crazy']
    

    另一种选择:

    def writeText(df):
        for row in df.text.reset_index().values:
            with open(str(row[0])+'.txt', 'w+') as f:
                f.write(str(row[1]))
    
    writeText(df)
    

    但是如果你需要apply functionDataFrame 使用iteritems:

    def writeText(x):
        for row in x.iteritems():
            with open(str(row[0])+'.txt', 'w+') as f:
                f.write(str(row[1]))
    
    df.apply(writeText)
    

    【讨论】:

    • 令人惊讶的是速度非常快,即使我按照你所说的那样使用 for 循环遍历行。
    • 嗯,可能主要瓶颈是写入文件。感谢您接受。
    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2020-04-19
    • 2021-12-31
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多