python pandas将两行或多行文本合并为一行
Posted
技术标签:
【中文标题】python pandas将两行或多行文本合并为一行【英文标题】:python pandas merge two or more lines of text into one line 【发布时间】:2017-07-03 13:28:40 【问题描述】:我有如下文本数据的数据框,
name | address | number
1 Bob bob No.56
2 @gmail.com
3 Carly carly@world.com No.90
4 Gorge greg@yahoo
5 .com
6 No.100
并且想把它做成这样的框架。
name | address | number
1 Bob bob@gmail.com No.56
2 Carly carly@world.com No.90
3 Gorge greg@yahoo.com No.100
我正在使用 pandas 读取文件,但不知道如何使用合并或连接。
【问题讨论】:
【参考方案1】:如果name
列包含唯一值,
print df
name address number
0 Bob bob No.56
1 NaN @gmail.com NaN
2 Carly carly@world.com No.90
3 Gorge greg@yahoo NaN
4 NaN .com NaN
5 NaN NaN No.100
df['name'] = df['name'].ffill()
print df.fillna('').groupby(['name'], as_index=False).sum()
name address number
0 Bob bob@gmail.com No.56
1 Carly carly@world.com No.90
2 Gorge greg@yahoo.com No.100
您可能需要ffill()
、bfill()
、[::-1]
、.groupby('name').apply(lambda x: ' '.join(x['address']))
、strip()
、lstrip()
、rstrip()
、replace()
之类的东西来将上述代码扩展到更复杂的数据。
【讨论】:
【参考方案2】:如果要转换性别行的数据框(每列中可能有 NaN
条目),可能没有直接的 pandas
方法。
您将需要一些代码来分配name
列中的值,以便pandas 可以知道bob
和@gmail.com
的拆分行属于同一用户Bob
。
您可以使用fillna
或ffill
方法将name
列中的每个空条目填充为其前一个用户,请参阅pandas dataframe missing data。
df ['name'] = df['name'].ffill()
# gives
name address number
0 Bob bob No.56
1 Bob @gmail.com
2 Carly carly@world.com No.90
3 Gorge greg@yahoo
4 Gorge .com
5 Gorge No.100
那么你可以使用groupby
和sum
作为聚合函数。
df.groupby(['name']).sum().reset_index()
# gives
name address number
0 Bob bob@gmail.com No.56
1 Carly carly@world.com No.90
2 Gorge greg@yahoo.com No.100
您可能会发现在NaN
和空白之间进行转换很有用,请参阅Replacing blank values (white space) with NaN in pandas 和pandas.DataFrame.fillna。
【讨论】:
以上是关于python pandas将两行或多行文本合并为一行的主要内容,如果未能解决你的问题,请参考以下文章