鱼C论坛

 找回密码
 立即注册
查看: 2014|回复: 9

pandas中数据拼接的疑问

[复制链接]
发表于 2019-5-21 13:46:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
数据中的数字,想拼接成一组新数值。
但是出来的结果却有点看不明白。。
请教下,该如何处理?
2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-21 13:51:04 | 显示全部楼层
本帖最后由 老笨啊 于 2019-5-21 13:52 编辑

说明下几点:
1. 目的是拼接X1,X3,X5三个字段,将数值拼接到一起;
2. 原X5字段中存在空值;如X5为空值,则X6也返回空值。X5非空的情况下,则进行数字拼接。
3. X5字段可能存在数值10。如果采用数值计算公式 X6 = X1 + X3/100 + X5 /1000的方法处理的话,会导致末尾的0被省略。这样的话,无法区分X5的原始值是10还是1。所以不能采用计算法来处理。
4. X3为整型,X1为浮点型(小数点后保留一位),X5可以转成整型(但是存在空值,所以我将其填充成-1后,再转换。。只是拼接时候,不知道为什么又变成了浮点型。。)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-21 15:42:20 | 显示全部楼层
老笨啊 发表于 2019-5-21 13:51
说明下几点:
1. 目的是拼接X1,X3,X5三个字段,将数值拼接到一起;
2. 原X5字段中存在空值;如X5为空值, ...

我这测试 没啥问题啊

>>> tb.ix[0]
X1    9.3
X2    3.0
X3    5.0
X4    8.0
X5    4.0
Name: 0, dtype: float64
>>> tb["X1"].ix[0]
9.3
>>> tb["X1"].ix[0].astype("str")+ tb["X3"].ix[0].astype("int").astype("str")+ tb["X5"].ix[0].astype("int").astype("str")
'9.354'
>>>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-21 16:10:23 | 显示全部楼层
wp231957 发表于 2019-5-21 15:42
我这测试 没啥问题啊

>>> tb.ix[0]

我这里还有缺失值的存在。。得事先处理下。。
另外,没搞懂你为什么没有问题。。
我哪里出错了?你的ix[0]是个什么目的呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-21 16:14:12 | 显示全部楼层
老笨啊 发表于 2019-5-21 16:10
我这里还有缺失值的存在。。得事先处理下。。
另外,没搞懂你为什么没有问题。。
我哪里出错了?你的ix ...

ix[0] 不就是取第一行数据吗  因为我临时做了个表  只有一行数据  所以[0]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-21 16:23:26 | 显示全部楼层
wp231957 发表于 2019-5-21 16:14
ix[0] 不就是取第一行数据吗  因为我临时做了个表  只有一行数据  所以[0]

哦,我就奇怪怎么莫名多了个ix[0]。。还以为有什么特殊目的。。
但是,事实上,我进行操作的结果,就是如截图所示。。
想不明白,怎么拼接的时候X5又变成浮点型了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-21 16:33:35 | 显示全部楼层
老笨啊 发表于 2019-5-21 16:23
哦,我就奇怪怎么莫名多了个ix[0]。。还以为有什么特殊目的。。
但是,事实上,我进行操作的结果,就是 ...

astype("int").astype("str")  这个呢 试过了没
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-21 17:19:20 | 显示全部楼层
wp231957 发表于 2019-5-21 16:33
astype("int").astype("str")  这个呢 试过了没

X5在转成字符串前,我就先转成整型了的。。
你看第一行。。。我还查看了各数据的型式。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-22 15:42:22 | 显示全部楼层
本帖最后由 老笨啊 于 2019-5-22 15:43 编辑

自己想了好久,才勉强解决了。。但是感觉代码太繁琐。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-22 15:43:02 | 显示全部楼层
wp231957 发表于 2019-5-21 16:33
astype("int").astype("str")  这个呢 试过了没

折腾半天,需要这么多行代码,才能解决问题。。
我总感觉有更好的办法来处理。。
  1. data['X5'].fillna(-1,inplace =True)  #填充空值
  2. data['X1'] = data['X1'].astype(str) #转字符串,方便拼接
  3. data['X3'] = data['X3'].astype(str)
  4. #X5比较特殊,其原为浮点型,需先填充空值,再转成整型(不填充空值,无法转整型),然后转成字符串。以去除小数点后的0.
  5. data['X5'] = data['X5'].astype(int) .astype(str)
  6. def x6(x):
  7.     if x['X5'] != '-1':
  8.         return ''.join(x[['X1','X3','X5']])
  9.     else:
  10.         return np.NaN
  11. data['X6'] = data.apply(x6,axis=1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-15 22:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表