连接pandas对象,其中一个是一维pd ndarray

时间:2017-10-20 16:09:13

标签: python pandas dataframe merge

我有一个很长的pd数据帧mydf和一维的ndarray,列名和类型相同,创建如下:

Row = pd.Series(0, mydf.columns)
Row = mydf.iloc[index]

我想将Row添加到数据框i中间的定义位置mydf。我使用以下内容:

mydf = pd.concat([mydf.head(idx), Row , mydf.tail(len(mydf) - idx)])

我总是收到以下警告,然后代码没有运行:

 '>' not supported between instances of 'int' and 'str', sort order is undefined for incomparable objects 
result = result.union(other)

如果我的Row具有与数据帧完全相同的格式,错误怎么会出现?如何解决这个问题?

THX。

1 个答案:

答案 0 :(得分:0)

你得到的只是一个警告,Row开始以不正确的方式连接到数据帧。

Row是一个系列,您尝试在两个数据帧之间连接系列。 Series有索引dtype对象(字符串),df有索引dtype int。索引通常在连接时进行排序。现在该函数不知道如何对混合dtype索引进行排序。所以你得到了警告。

所以最好将Row转换为数据帧以避免此错误,即

ndf = pd.concat([mydf.head(index), pd.DataFrame(Row).T, mydf.tail(len(mydf) - index)])

例如,考虑数据帧 mydf

   id  offset  code
0   1       3    21
1   1       3    24
2   1       5    21
index= 2 
Row = mydf.iloc[index]
df = pd.concat([mydf.head(index), Row , mydf.tail(len(mydf) - index)])

/python3.5/site-packages/pandas/core/indexes/api.py:77: RuntimeWarning: unorderable types: str() < int(), sort order is undefined for incomparable objects
result = result.union(other)
       id  offset  code     0
0       1.0     3.0  21.0   NaN
1       1.0     3.0  24.0   NaN
id      NaN     NaN   NaN   1.0
offset  NaN     NaN   NaN   5.0
code    NaN     NaN   NaN  21.0
2       1.0     5.0  21.0   NaN
df = pd.concat([mydf.head(index), pd.DataFrame(Row).T , mydf.tail(len(mydf) - index)])
   id  offset  code
0   1       3    21
1   1       3    24
2   1       5    21
2   1       5    21