我正在嘗試操作 excel 表資料以在 excel(不是開發人員)上自動執行一個程序,以便從第一行中洗掉最后一行的值,然后從第二行中洗掉最后一行的值,依此類推,我的資料是類似于下面
Code Col1 Col2
0 A 1.7653 56.2
1 B 1 Nan
2 C Nan 5
3 D 34.4 0
我必須從第一列中減去最后一列,然后從第二列中減去最后一列,依此類推,直到我在中間遇到它們(假設我們只有偶數行),我已經解決了擺脫帶有字串的列的問題,所以我的輸出熊貓看起來像這樣
Col1 Col2
0 1.7653 56.2
1 1 Nan
2 Nan 5
3 34.4 0
現在我需要扣除這些值,因此要創建的新熊貓框架將如下所示:扣除后找到以下值
Col1 Col2
0 -32.2347 56.2
1 1 -5
我能夠按 1 個值洗掉它,但無論我有多少行都不能迭代地洗掉它,并創建一個與輸出相同列的第一個行的一半的熊貓
Nan 將被視為 0,實際資料集有數百個可以更改的列和行
代碼:
import pandas as pd
import datetime
# Create a dataframe
df = pd.read_excel(r'file.xls', sheet_name='sheet1')
for col, dt in df.dtypes.items():
if dt == object:
df = df.drop(col, 1)
i=0
for col in df.dtypes.items():
while i < len(df)/2:
df[i] = df[i] - df[len(df) - i]
i
uj5u.com熱心網友回復:
一種方法可能如下:
import pandas as pd
import numpy as np
df = pd.DataFrame([["A", 1.7653, 56.2], ["B", 1, np.nan], ["C", np.nan, 5], ["D", 34.4, 0]], columns=["Code", "Col1", "Col2"], )
del df["Code"]
df.fillna(0, inplace=True)
s = df.shape[0] // 2
differences = pd.DataFrame([df.iloc[i] - df.iloc[df.shape[0]-i-1] for i in range(s)])
print(differences)
輸出
Col1 Col2
0 -32.6347 56.2
1 1.0000 -5.0
跟進
看了評論,我明白你要應用的減法邏輯如下:
- 如果兩個數字都不是,則為正常減法
nan - 如果其中一個數字是
nan,則nan用 0交換 - 如果兩個數字都是
nan,則回傳一個 `nan
我不知道是否有一個開箱即用的功能,因此我創建了一個custom_sub. 為免生疑問,這是我正在使用的檔案
網格.txt
,Code,Col1,Col2
0,A,1.7653,56.2
1,B,1,
2,C,,5
3,D,34.4,0
代碼:
import pandas as pd
import numpy as np
df = pd.read_csv("grid.txt", sep=",",index_col=[0])
del df["Code"]
def custom_sub(x1, x2):
if np.isnan(x1) or np.isnan(x2):
if np.isnan(x1) and np.isnan(x2):
return np.nan
else:
return -x2 if np.isnan(x1) else x1
else:
return x1 - x2
s = df.shape[0] // 2
differences = pd.DataFrame([df.iloc[i].combine(df.iloc[df.shape[0]-i-1], custom_sub) for i in range(s)])
print(differences)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386237.html
上一篇:如何修復StreamlitAPIException:(“預期的位元組,得到了一個‘int’物件”,“轉換為具有型別物件的列值失敗”)
