python - pandas 传递错误的项目数 6,位置暗示 1
问题描述
我有一个df:
MinMaleTA
0 888(G2M)
1 888(AAM)
2 888(G2M)
3 888(G2M)
4 456
5 123
我想添加一个新列:
如果 df['MinMaleTA'] 包含字符串“( )”,则新列的值将是“( )”内的字符串。
如果 df['MinMaleTA'] 不包含字符串“( )”,则新列的值为 None。
输出应如下所示:
MinMaleTA NewCol
0 888(G2M) G2M
1 888(AAM) AAM
2 888(G2M) G2M
3 888(G2M) G2M
4 456 None
5 123 None
我试过:
df['ScaleName']=np.where(df['MinMaleTA'].str.contains("(",regex=False),df['MinMaleTx'].str.extract(r'\((.*)\)'),None)
错误:
Wrong number of items passed 6, placement implies 1
我测试了:
df['MinMaleTA'].str.contains("(",regex=False)
输出是:
True
True
True
True
False
False
和:
df['MinMaleTx'].str.extract(r'\((.*)\)')
输出是:
G2M
AAM
G2M
G2M
None
None
所以它接缝:
两个都:
df['MinMaleTA'].str.contains("(",regex=False)
和
df['MinMaleTx'].str.extract(r'\((.*)\)')
工作,他们会做他们的工作。
但是一旦我将它们组合在一起:
df['ScaleName']=np.where(df['MinMaleTA'].str.contains("(",regex=False),df['MinMaleTx'].str.extract(r'\((.*)\)'),None)
错误出来:
Wrong number of items passed 6, placement implies 1
解决方案
此错误与str.extract
.
当你运行时df['MinMaleTA'].str.extract(r'\((.*)\)')
,你不会得到 a pd.Series
,你得到的 apd.DataFrame
列的范围从 0 到你的 N 个捕获组。因为您只有一个捕获组,所以如下所示:
0
0 G2M
1 AAM
2 G2M
3 G2M
4 NaN
5 NaN
这意味着当您制作np.where
选择器时,它会为每一行传递整个数据帧。因此:
>>> np.where(df['MinMaleTA'].str.contains("(",regex=False),
df['MinMaleTA'].str.extract(r'\((.*)\)'), np.nan)
array([['G2M', 'G2M', 'G2M', 'G2M', nan, nan],
['AAM', 'AAM', 'AAM', 'AAM', nan, nan],
['G2M', 'G2M', 'G2M', 'G2M', nan, nan],
['G2M', 'G2M', 'G2M', 'G2M', nan, nan],
[nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan]], dtype=object)
# Nb I substituted `np.nan` for `None`
这就是为什么您有 6 个条目而不是 1 个条目。要解决此问题,请在您的where
语句中附加.iloc[:, 0]
到str.extract
.
或者,从 Anurag Dabas 合并到此处的答案中,传递expand=False
给str.extract
. 由于您只捕获一个组,这将返回np.where
预期的系列。因此:
df['ScaleName']=np.where(
df['MinMaleTA'].str.contains("(",regex=False),
df['MinMaleTA'].str.extract(r'\((.*)\)',expand=False),
None)
请注意,如果有多个捕获组,这将不起作用:str.extract
在这种情况下返回数据帧。
推荐阅读
- javascript - 围绕对象opencv.js的边界矩形在控制台中抛出错误
- git - Git 推送到远程而不拉取并防止远程文件被删除
- c# - 如何旋转 ImageDrawing?
- python - Python - 在 Windows 上设置 python 路径的更快方法?
- c# - 在比较预期/实际之前,XUnit 未在字符串中执行代码
- csv - SQLCMD 将“7 k”字符串更改为 7k 或 7,000?
- java - 指南针覆盖地图使用 osmdroid 6.1
- tensorflow - 使用 Keras 将 theano 后端转换为 tensorflow 后端需要什么?
- parameter-sets - 如何增加 TFS 中的参数集限制?
- matlab - 在matlab中将向量拆分为更小的向量