我将数据框值转换为str,但是当我将它们串联在一起时,先前的int包括尾随的小数点。
df["newcol"] = df['columna'].map(str) + '_' + df['columnb'].map(str) + '_' + df['columnc'].map(str)
这给了我类似的输出
500.0
如何摆脱前导/尾随的十进制? 有时我在a列中的数据将包含非字母数字字符。
+---------+---------+---------+------------------+----------------------+
| columna | columnb | columnc | expected | currently getting |
+---------+---------+---------+------------------+----------------------+
| | -1 | 27 | _-1_27 | _-1.0_27.0 |
| | -1 | 42 | _-1_42 | _-1.0_42.0 |
| | -1 | 67 | _-1_67 | _-1.0_67.0 |
| | -1 | 95 | _-1_95 | _-1.0_95.0 |
| 91_CCMS | 14638 | 91 | 91_CCMS_14638_91 | 91_CCMS_14638.0_91.0 |
| DIP96 | 1502 | 96 | DIP96_1502_96 | DIP96_1502.0_96.0 |
| 106 | 11694 | 106 | 106_11694_106 | 00106_11694.0_106.0 |
+---------+---------+---------+------------------+----------------------+
错误:
invalid literal for int() with base 10: ''
答案 0 :(得分:2)
修改:
如果您的df
具有3列以上,并且您只想连接3列,则可以使用列切片在命令中指定这些列。假设您的df
有5列,分别为:AA
,BB
,CC
,DD
,EE
。您只希望加入列CC
,DD
,EE
。您只需要在fillna
之前指定那三列,然后根据需要将结果分配给newcol
:
df["newcol"] = df[['CC', 'DD', 'EE']].fillna('') \
.applymap(lambda x: x if isinstance(x, str) else str(int(x))).agg('_'.join, axis=1)
注意:我只是使用'\'
将命令分成两行,以方便阅读。
原始:
我猜您的columna
columnb
columnc
的真实数据包含str
,float
,int
,空白,甚至还有{ {1}}。
NaN
中,十进制值= .00的 Float
将不带小数。
假设您的object
只有3列:如您所说,df
,colmna
,columnb
。使用以下命令将处理:columnc
,str
,float
,int
,并根据需要将3列合并为一列:
NaN
我创建了一个与您相似的样本
df.fillna('').applymap(lambda x: x if isinstance(x, str) else str(int(x))).agg('_'.join, axis=1)
使用命令返回您所描述的具有'.0'的连接字符串
columna columnb columnc
0 -1 27
1 NaN -1 42
2 -1 67
3 -1 95
4 91_CCMS 14638 91
5 DIP96 96
6 106 11694 106
使用我的命令:
df['columna'].map(str) + '_' + df['columnb'].map(str) + '_' + df['columnc'].map(str)
Out[1926]:
0 _-1.0_27.0
1 nan_-1.0_42.0
2 _-1.0_67.0
3 _-1.0_95.0
4 91_CCMS_14638_91
5 DIP96__96
6 106_11694_106
dtype: object
答案 1 :(得分:1)
我无法重现此错误,但也许您可以尝试以下操作:
df["newcol"] = df['columna'].map(lambda x: str(int(x)) if isinstance(x, int) else str(x)) + '_' + df['columnb'].map(lambda x: str(int(x))) + '_' + df['columnc'].map(lambda x: str(int(x)))