[英]Python: how to pass 3 columns in data frame as 3 separate arguments in function and iterate through the column values
[英]Pass values of a pandas column as separate arguments in a function
我有一个 csv 文件,其中包含 xy 和 z 行以及不同名称的列。 本质上,这些是每个名称的三维坐标。 我已将此 csv 作为 dataframe 导入,如下所示:
Coordinate C1 C2 C3 C4 C5 N6
0 x 0.16620 0.20640 0.16240 0.08140 0.04370 0.08288
1 y 0.22340 0.34680 0.44090 0.41100 0.28550 0.18996
2 z 0.38187 0.42618 0.40091 0.33013 0.28793 0.31430
我想对坐标进行转换,例如 (x,y,z)->(y,x,z)。 我对 python 没有太多经验,但我发现我可以用一个简单的 function 来做到这一点,例如
def trans(x,y,z):
return (y,x,z)
我在以 x、y 和 z 的形式从每列获取值时遇到问题,以便我可以将它们传递给 function 以实现所需的转换。 我发现我可以通过使用将每一列转换为一个元组
tuple([tuple(co_df[col]) for col in co_df])
然而,这最终会给我一个元组的元组。 我可以改为将其转换为元组列表,但随后我遇到了将元组列表传递到我的 function 以转换坐标的问题。 任何帮助表示赞赏!
我还没有足够的声誉来发表评论,但也许 for 循环会很有用
例如,要为每一列打印 trans 的 output,您可以执行以下操作:
for column in list(co_df):
a,b,c=co_df[column]
print(trans(a,b,c))
这将打印:
('y', 'x', 'z')
(0.22340, 0.16620, 0.38187)
(0.34680, 0.20640, 0.42618)
(0.44090, 0.16240, 0.40091)
(0.41100, 0.08140, 0.33013)
(0.28550, 0.04370, 0.28793)
(0.18996, 0.08288, 0.31430)
一旦它们被转换,你打算如何处理这些值? 您是否需要将它们存储在 object 中?
编辑重新。 您关于a,b,c=co_df[column]
做什么的问题,请在单个列级别考虑这一点,例如co_df["C1"]
print(co_df["C1"])
返回
0 0.16620
1 0.22340
2 0.38187
执行a,b,c=co_df["C1"]
将co_df["C1"]
["C1"] 的每个值分别分配给 a、b 和 c。
这是原始数据框:
from io import StringIO
import pandas as pd
data = ''' Coordinate C1 C2 C3 C4 C5 N6
0 x 0.16620 0.20640 0.16240 0.08140 0.04370 0.08288
1 y 0.22340 0.34680 0.44090 0.41100 0.28550 0.18996
2 z 0.38187 0.42618 0.40091 0.33013 0.28793 0.31430
'''
df = pd.read_csv(StringIO(data), sep='\s+')
print(df)
Coordinate C1 C2 C3 C4 C5 N6
0 x 0.16620 0.20640 0.16240 0.08140 0.04370 0.08288
1 y 0.22340 0.34680 0.44090 0.41100 0.28550 0.18996
2 z 0.38187 0.42618 0.40091 0.33013 0.28793 0.31430
首先,您可以将列按不同的顺序排列,如下所示:
print(df[['Coordinate', 'N6', 'C5', 'C4', 'C3', 'C2', 'C1']])
Coordinate N6 C5 C4 C3 C2 C1
0 x 0.08288 0.04370 0.08140 0.16240 0.20640 0.16620
1 y 0.18996 0.28550 0.41100 0.44090 0.34680 0.22340
2 z 0.31430 0.28793 0.33013 0.40091 0.42618 0.38187
其次,您可以像这样重新标记列(分配给 df.columns):
df.columns = ['Coordinate', 'N6', 'C5', 'C4', 'C3', 'C2', 'C1']
print(df)
Coordinate N6 C5 C4 C3 C2 C1
0 x 0.16620 0.20640 0.16240 0.08140 0.04370 0.08288
1 y 0.22340 0.34680 0.44090 0.41100 0.28550 0.18996
2 z 0.38187 0.42618 0.40091 0.33013 0.28793 0.31430
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.