string - 如何在带有标题的jupyter笔记本中将单行转换为四个不同的列?
问题描述
我有一个单行的excel文件。我导入了 jupyter notebook,我试图在 jupyter notebook 中使用 pandas 在这一行中创建四列。例如行:
姓名:查尔斯
电子邮件:char@gmail.com
密钥:10223209asd
摘要:这是一个例子
名称:大脑
电子邮件:bria@gmail.com
密钥:10390weq09asd
摘要:这是一个例子
我希望列是这样的,每行都有信息。
4 列:名称电子邮件密钥摘要
第一行:姓名:charles 电子邮件:char@gmail.com 密钥:10223209asd 摘要:这是一个..
我还有第二个文件。如何取两行并将它们分成带有标题的两列。
电子邮件:steven@gmail.com
信息:这是电子邮件的示例。这比一个句子长。
电子邮件:chris@gmail.com
信息:这是电子邮件的示例。这比一个句子长。
我希望这些列是这样的,其中包含 2 列电子邮件和信息中的信息。
解决方案
reshape
与DataFrame
构造函数一起使用:
print (df)
col
0 name: charles
1 email: char@gmail.com
2 key: 10223209asd
3 summary: this is an example
4 name: brain
5 email: bria@gmail.com
6 key: 10390weq09asd
7 summary: this is an example
cols = ['name','email','key','summary']
df1 = pd.DataFrame(df['col'].values.reshape(-1, 4), columns=cols)
print (df1)
name email key \
0 name: charles email: char@gmail.com key: 10223209asd
1 name: brain email: bria@gmail.com key: 10390weq09asd
summary
0 summary: this is an example
1 summary: this is an example
如果要删除之前的值:
cols = ['name','email','key','summary']
df2 = pd.DataFrame(df['col'].str.split(':\s+').str[1].values.reshape(-1, 4), columns=cols)
print (df2)
name email key summary
0 charles char@gmail.com 10223209asd this is an example
1 brain bria@gmail.com 10390weq09asd this is an example
一般解决方案是DataFrame
由创建str.split
,然后计算重复次数cumcount
,最后一次整形unstack
:
df2 = df['col'].str.split(':\s+', expand=True)
df2.columns = ['key','val']
df2 = df2.set_index([df2.groupby('key').cumcount(), 'key'])['val'].unstack()
print (df2)
key email key name summary
0 char@gmail.com 10223209asd charles this is an example
1 bria@gmail.com 10390weq09asd brain this is an example
推荐阅读
- groovy - jasperreports 无法使用日期时间函数编译 - 找不到符号
- c# - c#单元测试模拟类属性
- java - 数据结构链表
- c# - 在 C# 中解密 Python 加密 fernet 令牌
- c# - 从数据库中获取以逗号分隔的 MVC 中每条记录的项目列表?
- json - 卷曲 JSON 以仅输出一个对象
- autosys - autosys jil 文件:我可以在添加新属性时使用 update_job
- javascript - Modal 仅在默认情况下不隐藏时才会显示
- google-sheets - 在表格之间的所有列中搜索和复制缺失的数据
- java - 改造,使用泛型调用API,调用导致onFailure()