python - 带分隔符的拆分列
问题描述
| A | B
| a;b;c | 1;2;3
| a;b;c;d | 1
为了拆分列,我正在使用
new = df["A"].str.split(";", n=5, expand=True).
df['A1'] = new[0]
df['A2'] = new[1]
df['A3'] = new[2]
df['A4'] = new[3]
df.drop(columns=["A"], inplace=True)
df['B1'] = new[0]
df['B2'] = new[1]
df['B3'] = new[2]
df.drop(columns=["B"], inplace=True)
有没有其他选择,我不需要计算每列中的数据数量?我仍然需要输出类似于:
| A1| A2| A3| A4| B1| B2| B3
| a | b | c | | 1 | 2 | 3
| a | b | c | d | 1 | |
谢谢!
解决方案
无需指定拆分数量,因为默认情况下会在分隔符的每个实例上拆分。结果将是一个 DataFrame,其中列是 RangeIndex,因此添加列作为前缀。循环遍历每个系列(因为它是 Series.str.split),然后concat
加入结果。
df = pd.concat([df[col].str.split(';', expand=True).add_prefix(col) for col in df.columns],
axis=1)
A0 A1 A2 A3 B0 B1 B2
0 a b c None 1 2 3
1 a b c d 1 None None
请注意,这些'B'
列包含字符串'1'
,因此如果您想要使用数字pd.to_numeric
:
numerics = df.columns[df.columns.str.startswith('B')]
df[numerics] = df[numerics].apply(pd.to_numeric, errors='coerce')
A0 A1 A2 A3 B0 B1 B2
0 a b c None 1 2.0 3.0
1 a b c d 1 NaN NaN
推荐阅读
- css - 在 React Native SectionList 上应用样式
- docker - 如何生成自定义 Docker 内容信任根密钥
- php - 使用 AJAX 请求 PHP 文件数据
- python-3.x - 断开 tweepy 流
- node.js - 使用 node.js 连接到 Azure Redis 集群 ioredis 不起作用
- php - 使用 AJAX 请求将表单数据发送到自定义帖子类型 WP
- javascript - 如何在 for 循环中获取 id 并插入函数 vue.js
- json - 如何使用 Flutter 解析嵌套的 JSON?
- javascript - 将动态数组转换为单个对象
- python - 我想根据选择的类别显示产品列表 -django