我有一个数据框,我希望每一列都为字符串格式。所以我这样做:
df = df.astype(str)
Run Code Online (Sandbox Code Playgroud)
问题在于,所有NaN条目都以这种方式转换为字符串“ nan”。并isnull返回false。有没有一种方法可以转换为字符串,但保持原样为空?
将您的空值转换为空字符串,然后将数据帧转换为字符串类型。
df.replace(np.nan, '').astype(str)
Run Code Online (Sandbox Code Playgroud)
请注意,您可以通过以下方式测试“空值”:
df.apply(lambda s: s.str.len() == 0)
Run Code Online (Sandbox Code Playgroud)
当您这样做时astype(str),dtype将始终为object,这是一个包含混合列的dtype。因此,您可以做的一件事就是像往常一样将其转换为objectusing astype(str),然后将其替换为nan实际的NaN(本质上是一个float),从而允许您使用以下方法访问它isnull:
df.astype(str).replace('nan',np.nan)
Run Code Online (Sandbox Code Playgroud)
例:
df = pd.DataFrame({'col1':['x',2,np.nan,'z']})
>>> df
col1
0 x
1 2
2 NaN
3 z
# Note the mixed str, int and null values:
>>> df.values
array([['x'],
[2],
[nan],
['z']], dtype=object)
df2 = df.astype(str).replace('nan',np.nan)
# Note that now you have only strings and null values:
>>> df2.values
array([['x'],
['2'],
[nan],
['z']], dtype=object)
Run Code Online (Sandbox Code Playgroud)
对于系列,您可以astype仅在零件上使用,notnull无需重新更换NaN零件
df = pd.DataFrame([1, np.nan, 'String'])
df[df.notnull()] = df[df.notnull()].astype(str)
Run Code Online (Sandbox Code Playgroud)
正如评论中所述,对于 DataFrame,您可以使用
df.where(df.isna(), df.astype(str))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |