我有一个在脚本中运行两个功能的场景:
test.py:
def func1():
df1=pd.read_csv('test1.csv')
val1=df['col1'].mean().round(2)
return va11
def func2():
df2=pd.read_csv('test2.csv')
val2=df['col1'].mean().round(2)
return val2
def func3():
dataf = pd.read_csv('test3.csv')
col1=dataf['area']
col2 = dataf['overall']
dataf['overall']=val1 # value from val1 ->leads to error
dataf['overall']=val2 #value from val2 ->leads to error
在这里,我正在读取test1.csv和test2.csv文件,并将平均值分别存储在变量“ val1”和“ val2”中并返回相同值。
我想将这些变量值存储在一个新的test3.csv文件中,该文件具有两个列,并且值应一个接一个地存储(追加)。综上所述,它无法正常工作,因此无法在互联网上找到任何内容。任何帮助都会很棒。
最佳答案
您需要在函数func3
中将变量作为参数传递,并且如果func1
和func2
的唯一区别是文件名,则仅使用parameetr创建一个函数。
感谢您的想法cᴏʟᴅsᴘᴇᴇᴅ;)
def func1(file):
df=pd.read_csv(file)
val=df['col1'].mean().round(2)
return val
a = func1('test1.csv')
b = func1('test2.csv')
def func3(val1=a, val2=b):
dataf = pd.read_csv('test3.csv')
col1=dataf['area']
col2 = dataf['overall']
dataf.iloc[::2, dataf.columns.get_loc('overall')] = val1
dataf.iloc[1::2, dataf.columns.get_loc('overall')] = val2
return dataf
样品:
dataf = pd.DataFrame({'overall':[1,7,8,9,4],
'col':list('abcde')})
print (dataf)
col overall
0 a 1
1 b 7
2 c 8
3 d 9
4 e 4
val1 = 20
val2 = 50
dataf.iloc[::2, dataf.columns.get_loc('overall')] = val1
dataf.iloc[1::2, dataf.columns.get_loc('overall')] = val2
print (dataf)
col overall
0 a 20
1 b 50
2 c 20
3 d 50
4 e 20
从列表追加
N
值的一般解决方案-通过numpy.tile
创建数组,然后分配给新列:val =[1,8,4]
a = np.tile(val, int(len(dataf) / len(val))+2)[:len(dataf)]
dataf['overall'] = a
print (dataf)
col overall
0 a 1
1 b 8
2 c 4
3 d 1
4 e 8
关于python - 将值分配给新列[Python pandas],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47152923/