簡體   English   中英

在 function 中將 pandas 列的值作為單獨的 arguments 傳遞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM