Python pandas-向数据帧添加序列会导致出现NaN值

Python pandas-向数据帧添加序列会导致出现NaN值,python,pandas,dataframe,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([n

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

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
更新
我认为由于完整代码的第一行,我得到了一个错误。这是一个独立但相关的问题:

对于完整的数据集,将最后一步从
df['concatenated']=df_1
更改为
df['concatenated']=df_1。值将解决这个问题,我认为这是一个bug,我非常肯定我以前在这方面见过它


或者只是:
df['concatenated']=[':'。为行中的行连接(如果单词不是np.nan,则为行中的单词连接)

无法使用
0.13.1
中的第一个解决方案重现该问题。我假设字典
d
中的
'np.nan'
应该是
np.nan
,对吗?这是正确的。我已经更新了字典。将
[0]
添加到
df\u医务人员\u type1
的末尾仍然会产生我在完整数据集中遇到的错误。它们有不同的索引,没有重叠列。我不确定您的评论是什么意思。上面的几行生成了您想要的输出。这个例子被简化了——我试图展示我正在使用下面的完整代码块做什么——它有一个多索引。当我使用.join和完整的代码集时,我得到
ValueError:cannotjoin没有指定级别,没有重叠的名称
这个答案被标记为低质量,因为它只是代码。你能解释一下为什么或者如何解决这个问题吗?@GoBrewers14-我不是那个给出答案的人。答案本身被堆栈溢出自动标记,并显示在审阅池中,因为它是一个仅代码的答案。我只是想提醒你,在帖子中添加附加信息将防止自动标记。添加
.values
使其成功创建了新的专栏这是一个奇怪的错误,不会影响小数据集,只会影响大数据集这确实很奇怪。转置后的完整数据集略多于1700行/18列。让我头撞在桌子上半天……发现我没有疯,这确实是一只奇怪的虫子,这让我松了一口气。谢谢你的回答。我也做了很多头部撞击。非常奇怪的虫子。我的数据帧是
125x17
只有btwI相信只有不同的索引才会出现这种情况
>>> 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)
>>> 
>>> rows = df.values
>>> df_1 = pd.DataFrame([':'.join(word for word in rows if word is not np.nan) for rows in rows])
>>> 
>>> df['concatenated'] = df_1[0]
>>> df
  Col_1 Col_2 Col_3 Col_4 Col_5 concatenated
0     A     B   NaN   NaN   NaN          A:B
1     A     C     D   NaN   NaN        A:C:D
2     A     B     C     D     E    A:B:C:D:E
3     B     D   NaN   NaN   NaN          B:D
>>> 
>>> df = df.join(df_1)
>>> df = df.rename(columns = {0:'concatenated'})