我有一些列['a', 'b', 'c', etc.](a和c是float64,而b是object)
I have some columns ['a', 'b', 'c', etc.] (a and c are float64 while b is object)
我想将所有列都转换为字符串并保留nan s.
I would like to convert all columns to string and preserve nans.
使用df[['a', 'b', 'c']] == df[['a', 'b', 'c']].astype(str)进行了尝试,但float64列留空.
Tried using df[['a', 'b', 'c']] == df[['a', 'b', 'c']].astype(str) but that left blanks for the float64 columns.
目前,我正在与以下各项进行逐一比较:
Currently I am going through one by one with the following:
df['a'] = df['a'].apply(str) df['a'] = df['a'].replace('nan', np.nan)使用.astype(str)然后用np.nan替换''的最佳方法是吗? 侧面问题:.astype(str)和.apply(str)之间有区别吗?
Is the best way to use .astype(str) and then replace '' with np.nan? Side question: is there a difference between .astype(str) and .apply(str)?
样本输入:(dtypes:a = float64,b = object,c = float64)
Sample Input: (dtypes: a=float64, b=object, c=float64)
a, b, c, etc. 23, 'a42', 142, etc. 51, '3', 12, etc. NaN, NaN, NaN, etc. 24, 'a1', NaN, etc.所需的输出:(dtypes:a =对象,b =对象,c =对象)
Desired output: (dtypes: a=object, b=object, c=object)
a, b, c, etc. '23', 'a42', '142', etc. '51', 'a3', '12', etc. NaN, NaN, NaN, etc. '24', 'a1', NaN, etc.推荐答案
df = pd.DataFrame({ 'a': [23.0, 51.0, np.nan, 24.0], 'b': ["a42", "3", np.nan, "a1"], 'c': [142.0, 12.0, np.nan, np.nan]}) for col in df: df[col] = [np.nan if (not isinstance(val, str) and np.isnan(val)) else (val if isinstance(val, str) else str(int(val))) for val in df[col].tolist()] >>> df a b c 0 23 a42 142 1 51 3 12 2 NaN NaN NaN 3 24 a1 NaN >>> df.values array([['23', 'a42', '142'], ['51', '3', '12'], [nan, nan, nan], ['24', 'a1', nan]], dtype=object)
更多推荐
大 pandas :将多列转换为字符串
发布评论