我有一个在脚本中运行两个功能的场景:

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中将变量作为参数传递,并且如果func1func2的唯一区别是文件名,则仅使用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/

10-12 18:35