pandas.DataFrame.iloc[]切片得到的数据竖着显示,且不能传进模型中。

错误现象

使用pandas读取西瓜分类的csv数据

data_raw = pd.read_csv(r'./data/watermelonf.csv', encoding='GB18030')
print(data_raw)

得到结果:

    色泽  根蒂  敲声  纹理  脐部  触感 好瓜
0   青绿  蜷缩  浊响  清晰  凹陷  硬滑  是
1   乌黑  蜷缩  沉闷  清晰  凹陷  硬滑  是
2   乌黑  蜷缩  浊响  清晰  凹陷  硬滑  是
3   青绿  蜷缩  沉闷  清晰  凹陷  硬滑  是
4   浅白  蜷缩  浊响  清晰  凹陷  硬滑  是
5   青绿  稍蜷  浊响  清晰  稍凹  软粘  是
6   乌黑  稍蜷  浊响  稍糊  稍凹  软粘  是
7   乌黑  稍蜷  浊响  清晰  稍凹  硬滑  是
8   乌黑  稍蜷  沉闷  稍糊  稍凹  硬滑  否
9   青绿  硬挺  清脆  清晰  平坦  软粘  否
10  浅白  硬挺  清脆  模糊  平坦  硬滑  否
11  浅白  蜷缩  浊响  模糊  平坦  软粘  否
12  青绿  稍蜷  浊响  稍糊  凹陷  硬滑  否
13  浅白  稍蜷  沉闷  稍糊  凹陷  硬滑  否
14  乌黑  稍蜷  浊响  清晰  稍凹  软粘  否
15  浅白  蜷缩  浊响  模糊  平坦  硬滑  否
16  青绿  蜷缩  浊响  稍糊  稍凹  硬滑  否
17  青绿  稍蜷  浊响  稍糊  平坦  硬滑  否

下面使用iloc()读取数据的第3行,去掉好瓜那一列,print出来

print(data_raw.iloc[3, :-1])

得到的结果有点奇怪

色泽    青绿
根蒂    蜷缩
敲声    沉闷
纹理    清晰
脐部    凹陷
触感    硬滑
Name: 3, dtype: object

按道理来说应该是这样

   色泽  根蒂  敲声  纹理  脐部  触感
3  青绿  蜷缩  沉闷  清晰  凹陷  硬滑

找昏头,才想起来用type查看这两个结果的类型,结果如下:

<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>

正确解决方法

建议查看pandas官方教程

当iloc函数中传入的两个索引的类型都是列表的时候,得到的结果类型就是DataFrame;

# 例如
print(type(data_raw.iloc[3, :-1]))
print(type(data_raw.iloc[[3], :-1]))
print(type(data_raw.iloc[1:3, :-1]))
print(type(data_raw.iloc[[1, 3], :-1]))

# 除了第一个的类型是Series,下面三个都是DataFrame。

当传入的索引有一个是int,另一个是列表时,得到Series类型;

# 例如:
b = data_raw.iloc[[3], 1]
print(type(b))
b = data_raw.iloc[3, [1]]
print(type(b))
b = data_raw.iloc[[3], 1]
print(type(b))

# 得到的结果均为<class 'pandas.core.series.Series'>

 当传入两个int类型时,得到一个确切的元素,类型即该元素的类型。

# 例如
c = data_raw.iloc[3, 1]
print(c, type(c))
# 得到: 蜷缩 <class 'str'>

trans_to_num(data_raw)
# 这个函数的作用是把里面的文字改为数字
c = data_raw.iloc[3, 1]
print(c, type(c))
# 得到: 2 <class 'numpy.int64'>

错误解决方法

曾经在不知所措的时候使用pandas.DataFrame函数,将Series数据类型转换为DataFrame。

a = pd.DataFrame(data_raw.iloc[3, :-1])
print(type(a))

print(a)
print("转换后的数据形状:", a.shape)

得到的类型也确实是

<class 'pandas.core.frame.DataFrame'>

但是维度不匹配,原来得到的数据是这样的

     3
色泽  青绿
根蒂  蜷缩
敲声  沉闷
纹理  清晰
脐部  凹陷
触感  硬滑
转换后的数据形状: (6, 1)

原来是直接按照原来的格式转换过去。

经验总结

多看官方文档!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值