Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何将此迭代应用于数据帧以修改它?_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x 如何将此迭代应用于数据帧以修改它?

Python 3.x 如何将此迭代应用于数据帧以修改它?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,目标是根据条件重命名数据框的列,并修改相应列的值 合并多个数据帧 更改列名 df_final_Adj=pd.DataFrame(data=df_final,columns=df_final.columns) 最后的 ID eTIV Ear_Vol_Adj Nose Eye_Vol_Adj Finger 0玛丽1.125 11.300 1麦克2.22 6 2.123 2巴里3.4373400 3斯科蒂5.43 85.500 更改包含标题“_Adj”的列的值 cols = d

目标是根据条件重命名数据框的列,并修改相应列的值

合并多个数据帧 更改列名 df_final_Adj=pd.DataFrame(data=df_final,columns=df_final.columns) 最后的

ID      eTIV    Ear_Vol_Adj Nose    Eye_Vol_Adj Finger
0玛丽1.125 11.300 1麦克2.22 6 2.123 2巴里3.4373400 3斯科蒂5.43 85.500

更改包含标题“_Adj”的列的值

cols = df_final_Adj.columns[df_final_Adj.columns.str.contains('_Adj')].tolist()
print(cols)

['Ear_Vol_Adj', 'Eye_Vol_Adj']
方法1:

df_final_Adj[col] = df_final_Adj[col].div(df_final_Adj['eTIV'], axis=0)
错误:

TypeError: unsupported operand type(s) for /: 'str' and 'int'"
TypeError: unsupported operand type(s) for /: 'str' and 'int'
方法2:

for col in cols:
        df_final_Adj[col] = df_final_Adj[col].div(df_final_Adj['eTIV'], axis=0)
错误:

TypeError: unsupported operand type(s) for /: 'str' and 'int'"
TypeError: unsupported operand type(s) for /: 'str' and 'int'

假设OP中显示的图像是应用函数
eTIV_Adjust
之前的数据,下面是我的尝试

根据OP描述生成数据

d = [['one', 'two_Volume', 'three', 'four', 'five', 'six', 'four_Volume'],
    [1,1,5,1,5,5,5],
    [1,1,5,1,5,5,5],
    [1,1,5,1,5,5,5],
    [1,1,5,1,5,5,5],
    [1,1,5,1,5,5,5]]

df = pd.DataFrame(d[1:], columns=d[0])
print(df)
   one  two_Volume  three  four  five  six  four_Volume
0    1           1      5     1     5    5            5
1    1           1      5     1     5    5            5
2    1           1      5     1     5    5            5
3    1           1      5     1     5    5            5
4    1           1      5     1     5    5            5
现在,如果key:中的'Vol',这一行
表明您正在查找包含部分字符串的列
'Vol'
。您可以使用来搜索这些列,而无需使用
iterrows
。使用此方法应用
(如上面@Andy Hayden所建议的)

cols = df.columns[df.columns.str.contains('Vol')].tolist()
print(cols)
['two_Volume', 'four_Volume']
现在,将这些列除以名为
five
的列(请参阅)

这种方法在以下方面起作用:

for col in cols:
    df_final_Adj[col] = df_final_Adj[col].div(df_final_Adj['eTIV'], axis=0)
df_final_Adj

你能举个例子吗,我觉得举个例子会容易得多。我相当肯定,您可以不使用apply或iteritems,仅使用loc来完成此操作。编辑版本中添加了一个示例。但实际的数据帧会大得多,具有不同的值,但需要相同的更改。请粘贴打印输出(df.to_字符串)而不是使用屏幕截图?请提供源数据的示例。例如,
df.head()
问题已相应编辑。感谢您的反馈!我根据一些评论修改了问题以澄清。您的方法基本上是有效的,但是,我对您建议的最后一个组件有问题-请参阅我修改的问题中的最后两条错误消息。@arkadiy,检查包含
\u Vol\u Adj
的两列中是否不包含字符串。如果它们确实应该是整数,那么听起来您对数据类型有问题。在循环的
之前尝试
df_final_Adj[cols]=df_final_Adj[cols].astype(int)
for col in cols:
    df_final_Adj[col] = df_final_Adj[col].div(df_final_Adj['eTIV'], axis=0)
df_final_Adj