专栏首页datartisanpandas踩过的坑 | 记一个群友的提问

pandas踩过的坑 | 记一个群友的提问

今天群里小伙伴提问了一个问题,下面这个图如何加上表头?

群里的每一次提问,都是一次面试,如果可以,我都会尝试解答。这里只晒了一张图,没有上下文,我提示代码不全,小伙伴后来补充了相关代码和报错:

根据报错提示,这里的对象 bSeries 类型,热心的小伙伴给出了解决方案:

1、b=pd.DataFrame(b)

2、b=b.reset_index(drop=False)

很快,小伙伴就去跑代码了,得出了下图结果:

很明显,这里的列名错位了,热心的小伙伴马上给出了解决方案:

①:保存时不写入index ②:rename ③:输出时:Index= False

下面是小伙伴给出的完整代码示例:

df.columns Index(['时间', 'Enodeb标识符', 'Enodeb中文名称', '厂家名称', '管理状态', '设备维护状态', '运行状态', '工程编号'], dtype='object') df.head() 时间 Enodeb标识符 … 运行状态 工程编号 0 2019/11/28 0:00:00 460-00-200188 … ENABLED 一期 1 2019/11/28 0:00:00 460-00-211503 … ENABLED 四期 2 2019/11/28 0:00:00 460-00-686652 … ENABLED 四期 3 2019/11/28 0:00:00 460-00-732426 … ENABLED 4G网络优化扩容2018年三阶段-新建P1 4 2019/11/28 0:00:00 460-00-518238 … ENABLED 蜂窝物联网一期工程P1 [5 rows x 8 columns] df['运行状态'].value_counts() ENABLED 58056 DISABLED 852 Name: 运行状态, dtype: int64 df1=df['运行状态'].value_counts() type(df1) df1.name '运行状态' df1.index Index(['ENABLED', 'DISABLED'], dtype='object') df2=pd.DataFrame(df1) type(df2) df2.columns Index(['运行状态'], dtype='object') df2.index Index(['ENABLED', 'DISABLED'], dtype='object') df3=df2.reset_index(drop=False) df3.columns Index(['index', '运行状态'], dtype='object') df3.index RangeIndex(start=0, stop=2, step=1) df3 index 运行状态 0 ENABLED 58056 1 DISABLED 852 df3.rename(columns={'index':'运行状态','运行状态':'计数'},inplace=True) df3 运行状态 计数 0 ENABLED 58056 1 DISABLED 852 df3.to_csv('运行状态统计.csv',encoding='GBK',index=False)

我给出的解决方案被证明是错的:

b.to_csv('as.csv', encoding='gbk', header=['cellname', 'cnt'])

SeriesDataFrame的方案,代码过于复杂了,下面是热心群友给出的简洁方案:

df1=df['运行状态'].value_counts()
df1.name='计数'
df1.to_csv('运行状态3.csv',encoding='GBK',index=True,header=True,index_label='运行状态2')

咱们来理一理,感觉Series直接输出csv并且保留表头很难搞的样子。

从我给出的错误代码入手,Series是数据序列,仅有一列数据,表象上看是两列,因为有一列是index,我给出的代码包含header=[ 'cellname', 'cnt'],误解为表头有两列,所以是错误的,下面通过一个简单的示例复盘下整个过程。

import pandas as pd

df = pd.read_csv(r'D:\abc.csv')
df

name

value

0

a

1

1

b

2

2

c

3

3

a

1

4

b

2

5

c

3

6

a

1

7

b

2

8

c

3

群友是要计算某列的计数

df2 = df['name'].value_counts()
df2
b    3
c    3
a    3
Name: name, dtype: int64
type(df2)
pandas.core.series.Series
df2.index
Index(['b', 'c', 'a'], dtype='object')
df2.name
'name'

可以看出,Series呈现出两列数据,左边是index,右边是数据列, 该数据列的内容对应index的计数,但是列名却是name,输出时需要修正一下,此处,Series的两列内容我们都想获取到,所以index=Trueindex内容对应原表的name,所以,index_label应该设置为name,而数据列的表头对应index的计数,所以header应该设置为count,至此,代码呼之欲出:

df2.to_csv(r'D:/abc2.csv', index=True, index_label='name', header=[ 'count'])

来看一下是否得到的预期的结果

本文分享自微信公众号 - 乐享数据8090(gh_5703273a0562),作者:mba1398

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux常用命令1

    tar -zcvf /home/abc/a.tar.gz /home/abc/a.txt

    披头
  • 10分钟入门Pandas-系列(2)

    pandas默认使用np.nan表示确实数据。 重新索引可以在特定的轴上修改、新增和删除索引。他将返回数据的副本。

    披头
  • 利用Python进行MR栅格数据处理

    df 中RSRP<=-110占比字段为 str ,需要先转换为 float 再除以100,最后用1-该值得到RSRP覆盖率

    披头
  • 【学习】7 个你不可不知的大数据定义

    在大多数人根本不知道大数据(Big Data)到底是什么的时候,不可否认的是,大数据已经在 21 世纪掀起一场惊涛骇浪。根据研究机构 IDC(国际数据资...

    小莹莹
  • SQLite3增删改查For Android

    AlicFeng
  • empower EMI 笔记

    empower blog:https://navneet-nmk.github.io/2018-08-26-empowerment/

    用户1908973
  • 2020可信云线上峰会丨云网融合新基建技术专讲为您解析云网未来

    所谓“云网融合”,云就是云计算,网即通信网。二者可谓是一对孪生兄弟,相辅相成,相互支撑。从云看网,云计算推动电信网络架构优化升级,如5G核心网、接入网、承载网的...

    云加小助手
  • 当我们在谈论瑞幸咖啡的时候,我们谈论什么?

    一个成立48年的咖啡巨头竟然被问到是否有可能被一个乳臭未干的新入局者超越,年初,路透社记者的这个提问让星巴克的CEO始料不及。但是瑞幸咖啡的破坏性创新更是让这家...

    曾响铃
  • elasticsearch5.5.3 源码学习 idea下源码编译

      1、学习elasticsearch 源码,通过搜索“elasticsearch源码”,进行相关搜索。      2、因源码gradle编译,选择gradle...

    杉枫
  • flink之udf执行流程分析篇

    1.UDF: 自定义标量函数(User Defined Scalar Function)。一行输入一行输出。2.UDAF: 自定义聚合函数。多行输入一行输出。3...

    开发架构二三事

扫码关注云+社区

领取腾讯云代金券