gpt4 book ai didi

python - 使用 Function 优化设置 Pandas 列

转载 作者:行者123 更新时间:2023-12-01 03:06:13 26 4
gpt4 key购买 nike

我的任务是根据用于创建所述 DataFrame 的文件在 DataFrame 中创建一列。我可以使用下面的代码示例来解决此任务,但我认为有更好的方法。我非常确定我可以跳过创建列并将其设置为零的步骤:dfp['F'] = 0,并且可能会使函数更加清晰。

您将如何优化这段代码?:

import pandas as pd
import numpy as np
dfp = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN],
'B' : [1,0,3,5,0,0,np.NaN,9,0,0],
'C' : ['AA1233445','A9875', 'rmacy','Idaho Rx','Ab123455','TV192837','RX','Ohio Drugs','RX12345','USA Pharma'],
'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN],
'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]})
print(dfp)

file2 = r'desktop\somefolder\foo.txt'
def filename():
if 'foo' in file2.lower():
return 'foo'
elif 'bar' in file2.lower():
return 'bar'

dfp['F'] = 0
dfp['F'] = dfp['F'] = filename()

print(dfp)

PS:我通常使用 pd.read_excel() 读取数据帧,因此在函数中使用文件名。同样使用pandas版本0.19.2

最佳答案

没有必要对每一行都执行此操作。您可以执行一次并将其填充到整个列中。

使用re模块

import re


fnames = re.findall('(foo|bar)', file2)
fname = fnames[0] if fnames else None

dfp['F'] = fname

dfp

A B C D E F
0 NaN 1.0 AA1233445 123456.0 Assign foo
1 NaN 0.0 A9875 123456.0 Unassign foo
2 3.0 3.0 rmacy 1234567.0 Assign foo
3 4.0 5.0 Idaho Rx 12345678.0 Ugly foo
4 5.0 0.0 Ab123455 12345.0 Appreciate foo
5 5.0 0.0 TV192837 12345.0 Undo foo
6 3.0 NaN RX 12345678.0 Assign foo
7 1.0 9.0 Ohio Drugs 123456789.0 Unicycle foo
8 5.0 0.0 RX12345 1234567.0 Assign foo
9 NaN 0.0 USA Pharma NaN Unicorn foo

关于python - 使用 Function 优化设置 Pandas 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com