cs9*_*s95 4 python nan dataframe pandas
给定一个数据帧:
Data
1 246804
2 135272
3 898.01
4 3453.33
5 shine
6 add
7 522
8 Nan
9 string
10 29.11
11 20
Run Code Online (Sandbox Code Playgroud)
我想两个新列Floats和Strings,两者具有相同长度的原始数据帧.获取Floats专栏很简单:
In [176]: pd.to_numeric(df.Data, errors='coerce')
Out[176]:
1 246804.00
2 135272.00
3 898.01
4 3453.33
5 NaN
6 NaN
7 522.00
8 NaN
9 NaN
10 29.11
11 20.00
Name: Data, dtype: float64
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,非浮动被强迫NaN,这正是我想要的.
为了得到字符串,我就是这样做的:
In [177]: df[df.Data.str.isalpha()]
Out[177]:
Data
5 shine
6 add
8 Nan
9 string
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,它不会将非String值保留为NaN.我想要这样的东西:
1 NaN
2 NaN
3 NaN
4 NaN
5 shine
6 add
7 NaN
8 Nan (not NaN)
9 string
10 NaN
11 NaN
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
要获取Strings,您可以在Data列上使用布尔索引并找到Floatsnull的位置.
df['Floats'] = pd.to_numeric(df.Data, errors='coerce')
df['Strings'] = df.Data.loc[df.Floats.isnull()] # Optional: .astype(str)
>>> df
# Output:
# Data Floats Strings
# 1 246804 246804.00 NaN
# 2 135272 135272.00 NaN
# 3 898.01 898.01 NaN
# 4 3453.33 3453.33 NaN
# 5 shine NaN shine
# 6 add NaN add
# 7 522 522.00 NaN
# 8 Nan NaN Nan
# 9 string NaN string
# 10 29.11 29.11 NaN
# 11 20 20.00 NaN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |