Python,将int转换为str,尾部/前导十进制/零

时间:2019-06-13 20:24:49

标签: python-3.x pandas

我将数据框值转换为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: ''

2 个答案:

答案 0 :(得分:2)

修改
如果您的df具有3列以上,并且您只想连接3列,则可以使用列切片在命令中指定这些列。假设您的df有5列,分别为:AABBCCDDEE。您只希望加入列CCDDEE。您只需要在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的真实数据包含strfloatint,空白,甚至还有{ {1}}。

在列dtype NaN中,十进制值= .00的

Float将不带小数。

假设您的object只有3列:如您所说,dfcolmnacolumnb。使用以下命令将处理:columncstrfloatint,并根据需要将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)))