python - pandas-将系列添加到数据框会导致出现 NaN 值

标签 python pandas dataframe

我有一个看起来像这样的数据框:

d = {'Col_1' : pd.Series(['A', 'A', 'A', 'B']),
     'Col_2' : pd.Series(['B', 'C', 'B', 'D']),
     'Col_3' : pd.Series([np.nan, 'D', 'C', np.nan]),
     'Col_4' : pd.Series([np.nan, np.nan, 'D', np.nan]),
     'Col_5' : pd.Series([np.nan, np.nan, 'E', np.nan]),}
df = pd.DataFrame(d)

Col_1  Col_2  Col_3  Col_4  Col_5
  A      B      NaN    NaN    NaN
  A      C      D      NaN    NaN
  A      B      C      D      E
  B      D      NaN    NaN    NaN

我的目标是按照以下方式结束:

Col_1  Col_2  Col_3  Col_4  Col_5  ConCat
  A      B      NaN    NaN    NaN    A:B
  A      C      D      NaN    NaN    A:C:D
  A      B      C      D      E      A:B:C:D:E
  B      D      NaN    NaN    NaN    B:D

我已经成功创建了一个看起来像所需输出的数据框:

rows = df.values
df_1 = pd.DataFrame([':'.join(word for word in rows if word is not np.nan) for rows in rows])

    0
0  A:B
1  A:C:D
2  A:B:C:D:E
3  B:D

但现在当我尝试将其放入原始数据框中时,我得到:

df['concatenated'] = df_1

Col_1  Col_2  Col_3  Col_4  Col_5  concatenated
  A      B      NaN    NaN    NaN    NaN
  A      C      D      NaN    NaN    NaN
  A      B      C      D      E      NaN
  B      D      NaN    NaN    NaN    NaN

奇怪的是,在创建简化示例时,它按预期工作。下面是我正在做的事情的完整代码。原始数据是从上面的原始数据框转过来的。

df_caregiver_type = pd.concat([df_caregiver_type[col].order().reset_index(drop=True) for col in df_caregiver_type], axis=1, ignore_index=False).T
df_caregiver_type.rename(columns=lambda x: 'Col_' + str(x), inplace=True)
rows = df_caregiver_type.values
df_caregiver_type1 = pd.DataFrame([':'.join(word for word in rows if word is not np.nan) for rows in rows])
df_caregiver_type['concatenated'] = df_caregiver_type1
df_caregiver_type = df_caregiver_type.T
df_caregiver_type

更新 我在想由于完整代码的第一行而出现错误。它来自一个单独但相关的问题:pandas: sort each column individually

最佳答案

对于您的完整数据集,将最后一步从 df['concatenated'] = df_1 更改为 df['concatenated'] = df_1.values 将解决问题,我认为这是一个错误,我很确定我以前在 SO 中看到过它。

或者只是:df['concatenated'] = [':'.join(word for word in row if word is not np.nan) for row in rows]

关于python - pandas-将系列添加到数据框会导致出现 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24188729/

相关文章:

python - 在 pandas 中生成截至特定日期的列表的最佳解决方案

python-3.x - 对于 Python 中的每个组/id,仅提取属于特定列的自然数

python - pandas 使用查询函数检查列是否为空

python - 使用 Selenium 和 Python 的日历选择器

python - 使用列表列表进行 Numpy 索引

python - 在 Flask-sqlalchemy 中使用两个数据模型时是否可以避免表名冲突

python - Tkinter按钮出现在其他对象下方

python - 迭代数据框列

python - 在将SQL与数据框一起使用时,OperationalError : (sqlite3. OperationalError)SQL变量过多

python - 计算 Pandas 数据框中 np.nan 的数量