如何将列表中的值插入现有列

时间:2019-01-04 05:50:55

标签: python pandas numpy dataframe

我想向现有数据框添加一个或多个值。 我的数据框看起来像:

    A    B
0 user1  value
1 user2  value
2 user3  value
3 user4  value

我有一个有时会有1个或多个用户的列表。

x = ['user5', 'user6']

因此,我想简单地将列表中的其他用户添加到A列。 如果列表中只有一个或多个值,则这将需要工作,因为它正在循环运行。

从列表中添加到列A的用户的列B不会有任何值。 B列的值为Nan

    A    B
0 user1  value
1 user2  value
2 user3  value
3 user4  value
4 user5  nan
5 user6  nan

当我执行以下代码时,我看不到我的数据框大小增加。

for x,n in zip(u,grps):
    # Filter Dataframe based on X and create new Dataframe
    df=raw.df[raw.df[raw.df.header['User']].isin(x)]
    #Create List of difference between new Dataframe and List X
    xList=(list(set(x)-set(df['User'])))
    # Add xList of Users to df Column
    df.loc[len(df)]=xList

我的代码可以正常工作,直到插入数据为止。

4 个答案:

答案 0 :(得分:2)

创建新的DataFrame并将appendconcat还原为原始数据:

print (df)
    User  Value
0  user1  value
1  user2  value
2  user3  value
3  user4  value

x = ['user5', 'user6']
xList= list(set(x)-set(df['User']))
df = df.append(pd.DataFrame({'User': xList}), ignore_index=True)
#alternative
#df = pd.concat([df, pd.DataFrame({'User': xList})], ignore_index=True)

print (df)
    User  Value
0  user1  value
1  user2  value
2  user3  value
3  user4  value
4  user5    NaN
5  user6    NaN

使用setting with enlargement的另一种解决方案:

xList= list(set(x)-set(df['User']))
for i in xList:
    df.loc[len(df), 'User'] = i
print (df)
    User  Value
0  user1  value
1  user2  value
2  user3  value
3  user4  value
4  user5    NaN
5  user6    NaN

答案 1 :(得分:1)

您可以使用新数据创建一个新的数据框,并将其附加到现有数据框中:

new = pd.DataFrame(columns=df.columns)
new['A'] = xList
df = df.append(a, ignore_index=True)

pd.concat也可以:

df = pd.concat([df, a], ignore_index=Trie)

答案 2 :(得分:1)

另一种方法:

现有数据框:

>>> df
       A      B
0  user1  value
1  user2  value
2  user3  value
3  user4  value

要添加的新用户列表:

x = ['user5', 'user6']

解决方案:只需通过pandas.DataFrame.append方法的循环即可。

for i in x:
    df = df.append({'A': i}, ignore_index=True)

print(df)
       A      B
0  user1  value
1  user2  value
2  user3  value
3  user4  value
4  user5    NaN
5  user6    NaN

答案 3 :(得分:1)

如果系列A表示唯一标识符,请考虑将其作为索引。然后,您可以使用pd.Index.differencepd.DataFrame.reindex方法:

df = df.set_index('A')
x = pd.Index(['user5', 'user6'])

new_users = x.difference(df.index)

df = df.reindex(df.index.union(new_users))
# alternative:
# df = df.reindex(np.hstack((df.index, new_users)))

print(df)

           B
A           
user1  value
user2  value
user3  value
user4  value
user5    NaN
user6    NaN

如果您希望将索引再次提升为系列,可以reset_index

print(df.reset_index())

       A      B
0  user1  value
1  user2  value
2  user3  value
3  user4  value
4  user5    NaN
5  user6    NaN