[英]Pandas ignore non-numeric values
我有這個df:
X
0 13500
1 13600
2 BBOX-001
3 Mobi-1
4 15003
5 15004
我想進入一個新專欄。 如果x> 15000則該值為A,否則為B.如果X為非數字(BBOX-001,Mobi-1),則應顯示X列中的值:
X Y
0 13500 B
1 13600 B
2 BBOX-001 BBOX-001
3 Mobi-1 Mobi-1
4 15003 A
5 15004 A
我在下面有這個,但如何忽略X列中的非數字值?
df['Y'] = np.where(df['X'] > 15000, 'A', 'B')
當df['X']
包含數字和字符串的混合時,列的dtype將是object
而不是數字dtype。 df['X']
的數字項可能是整數或浮點數,甚至可能是字符串(從你的問題中不清楚)。 在這種情況下,許多數字操作(例如df['X'] > 15000
可能會引發錯誤。
要將類似數字的值視為數字,請使用pd.to_numeric
將列轉換為數字dtype:
In [41]: numeric_X = pd.to_numeric(df['X'], errors='coerce')
In [43]: numeric_X
Out[43]:
0 13500.0
1 13600.0
2 NaN
3 NaN
4 15003.0
5 15004.0
Name: X, dtype: float64
您還可以通過測試NaN來識別類似字符串的值:
is_stringlike = np.isnan(numeric_X)
import numpy as np
import pandas as pd
df = pd.DataFrame({'X': ['13500', '13600', 'BBOX-001', 'Mobi-1', '15003', '15004']})
numeric_X = pd.to_numeric(df['X'], errors='coerce')
is_stringlike = np.isnan(numeric_X)
conditions = [numeric_X > 15000, is_stringlike]
choices = ['A', df['X']]
df['Y'] = (np.select(conditions, choices, default='B'))
print(df)
產量
X Y
0 13500 B
1 13600 B
2 BBOX-001 BBOX-001
3 Mobi-1 Mobi-1
4 15003 A
5 15004 A
您可以使用convert_objects
實現目標:
import pandas as pd
import numpy as np
df = pd.DataFrame({'X': ['13500', '13600', 'BBOX-001', 'Mobi-1', '15003', '15004']})
# Convert only numeric value to put it in comparison
df['Y'] = np.where(df.X.convert_objects(convert_numeric=True) > 15000, 'A', 'B')
print (df)
輸出:
X Y
0 13500 B
1 13600 B
2 BBOX-001 B
3 Mobi-1 B
4 15003 A
5 15004 A
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.