【发布时间】:2015-04-07 03:20:11
【问题描述】:
我有一个 Pandas DataFrame,其中包含一个字符串列,需要拆分为两个单独的列。我在this 问题上找到的使用tolist 的答案就像一个魅力,除非我的专栏包含NaN。下面的摘录描述了困难:
import pandas as pd
import numpy as np
# Example DataFrame
df = pd.DataFrame([[25.0, '34.2/ 18.1', 'one'],
[32.6, '28.6/ 17.9', 'two'],
[12.5, '30.1/ 17.6', 'three']], columns=['A', 'B', 'C'])
df2 = df.copy()
# This method works when all data are present
df['D'] = pd.DataFrame(df['B'].str.split('/').tolist())[1]
# However, when there are NaNs:
df2['B'][0] = np.nan
# This line fails
df2['D'] = pd.DataFrame(df2['B'].str.split('/').tolist())[1]
它给了我一个KeyError,因为中间的DataFrame只有一列,表明去一个列表然后返回的麻烦已经没有任何作用了:
0
0 NaN
1 [28.6, 17.9]
2 [30.1, 17.6]
我尝试先通过pd.DataFrame(df2['B'].str.split('/').dropna().tolist()) 删除 NaN,但随后我丢失了索引...我需要将 NaN 保持在索引 0。我还考虑过以某种方式在创建中间 DataFrame 强制两列,但我没有运气。
这就是我需要我的数据在 df2 中的样子:
A B C D
0 25.0 NaN one NaN
1 32.6 28.6/ 17.9 two 17.9
2 12.5 30.1/ 17.6 three 17.6
有没有办法在不使用列表作为中介的情况下做到这一点?或者以某种方式处理 NaN?
【问题讨论】:
标签: python pandas dataframe nan