我有一個包含兩列的 DataFrame。一列包含可能包含或不包含數字(整數或浮點數)的字串值。
樣本:
import pandas as pd
import numpy as np
data = [('A', '>10'),
('B', '10'),
('C', '<10'),
('D', '10'),
('E', '10-20'),
('F', '20.0'),
('G', '25.1') ]
data_df = pd.DataFrame(data, columns = ['name', 'value'])
Column 中的條目value具有字串資料型別。但是,它們的值可能是數字,也可能不是。
我想得到什么:
在 column 中查找哪些行具有數值
value。從資料集中洗掉其他行。
最終結果將如下所示:
name value
'B' 10
'D' 10
'F' 20.0
'G' 25.1
我嘗試使用isnumeric()函式,但它只回傳True整數(不是浮點數)。
如果您有任何解決此問題的想法,請告訴我。
更新的問題(多列):
(當有不止一列具有數值時,同樣的問題)
同樣,我有一個包含三列的 DataFrame。兩列包含可能包含或不包含數字(整數或浮點數)的字串值。
樣本:
import pandas as pd
import numpy as np
data = [('A', '>10', 'ABC'),
('B', '10', '15'),
('C', '<10', '>10'),
('D', '10', '15'),
('E', '10-20', '10-30'),
('F', '20.0', 'ABC'),
('G', '25.1', '30.1') ]
data_df = pd.DataFrame(data, columns = ['name', 'value1', 'value2'])
列中的條目value1&value2具有字串資料型別。但是,它們的值可能是數字,也可能不是。
我想得到什么:
value1找出哪些行在列&中有數值value2。從資料集中洗掉其他行。
最終結果將如下所示:
name value1 value2
'B' 10 15
'D' 10 15
'G' 25.1 30.1
uj5u.com熱心網友回復:
您可以使用pandas.to_numericwith errors='coerce',然后dropna洗掉無效行:
(data_df.assign(value=pd.to_numeric(data_df['value'], errors='coerce'))
.dropna(subset=['value'])
)
注意。這會將整數向上轉換為浮點數,但這是 Series 的作業方式,向上轉換比強制物件型別更好
輸出:
name value
1 B 10.0
3 D 10.0
5 F 20.0
6 G 25.1
如果您只想對行進行切片并保留字串型別:
data_df[pd.to_numeric(data_df['value'], errors='coerce').notna()]
輸出:
name value
1 B 10
3 D 10
5 F 20.0
6 G 25.1
更新的問題(多列)
在切片之前構建一個掩碼并使用any/ :all
mask = data_df[data_df.columns[1:]].apply(pd.to_numeric, errors='coerce').notna().all(1)
data_df[mask]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/410760.html
標籤:
上一篇:提取多個字串的相同開頭部分
下一篇:從字串中洗掉元素
