pandas DataFrame创建方法的方式
作者:蒙面的普罗米修斯 发布时间:2023-03-02 11:47:52
在pandas里,DataFrame是最经常用的数据结构,这里总结生成和添加数据的方法:
①、把其他格式的数据整理到DataFrame中;
②在已有的DataFrame中插入N列或者N行。
1. 字典类型读取到DataFrame(dict to DataFrame)
假如我们在做实验的时候得到的数据是dict类型,为了方便之后的数据统计和计算,我们想把它转换为DataFrame,存在很多写法,这里简单介绍常用的几种:
方法一:直接使用pd.DataFrame(data=test_dict)
即可,括号中的data=
写不写都可以,具体如下:
test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,89,99,78,97,93],'english':[89,94,80,94,94,90]}
#[1].直接写入参数test_dict
test_dict_df = pd.DataFrame(test_dict)
#[2].字典型赋值
test_dict_df = pd.DataFrame(data=test_dict)
那么,我们就得到了一个DataFrame,如下:
应该就是这个样子了。
方法二:使用from_dict
方法:
test_dict_df = pd.DataFrame.from_dict(test_dict)
结果是一样的,不再重复贴图。
其他方法:如果你的dict变量很小,例如{'id':1,'name':'Alice'}
,你想直接写到括号里:
test_dict_df = pd.DataFrame({'id':1,'name':'Alice'}) # wrong style
这样是不行的,会报错ValueError: If using all scalar values, you must pass an index
,是因为如果你提供的是一个标量,必须还得提供一个索引Index,所以你可以这么写:
test_dict_df = pd.DataFrame({'id':1,'name':'Alice'},pd.Index(range(1)))
后面的可以写多个pd.Index(range(3)
,就会生成三行一样的,是因为前面的dict型变量只有一组值,如果有多个,后面的Index必须跟前面的数据组数一致,否则会报错:
pd.DataFrame({'id':[1,2],'name':['Alice','Bob']},pd.Index(range(2))) #must be 2 in range function.
关于选择列,有些时候我们只需要选择dict中部分的键当做DataFrame的列,那么我们可以使用columns参数,例如我们只选择'id','name'列:
test_dict_df = pd.DataFrame(data=test_dict,columns=['id','name']) #only choose 'id' and 'name' columns
这里就不在多写了,后续变更颜色添加内容。
2. csv文件构建DataFrame(csv to DataFrame)
我们实验的时候数据一般比较大,而csv文件是文本格式的数据,占用更少的存储,所以一般数据来源是csv文件,从csv文件中如何构建DataFrame呢? txt文件一般也能用这种方法。
方法一:最常用的应该就是pd.read_csv('filename.csv')
了,用 sep
指定数据的分割方式,默认的是','
df = pd.read_csv('./xxx.csv')
如果csv中没有表头,就要加入head
参数
3. 在已有的DataFrame中,增加N列或者N行
加入我们已经有了一个DataFrame,如下图:
3.1 添加列
此时我们又有一门新的课physics,我们需要为每个人添加这门课的分数,按照Index的顺序,我们可以使用insert方法,如下:
new_columns = [92,94,89,77,87,91]
test_dict_df.insert(2,'pyhsics',new_columns)
#test_dict_df.insert(2,'pyhsics',new_columns,allow_duplicates=True)
此时,就得到了添加好的DataFrame,需要注意的是DataFrame默认不允许添加重复的列,但是在insert函数中有参数allow_duplicates=True
,设置为True后,就可以添加重复的列了,列名也是重复的:
3.2 添加行
此时我们又来了一位新的同学Iric,需要在DataFrame中添加这个同学的信息,我们可以使用loc
方法:
new_line = [7,'Iric',99]
test_dict_df.loc[6]= new_line
但是十分注意的是,这样实际是改的操作,如果loc[index]中的index已经存在,则新的值会覆盖之前的值。
当然也可以把这些新的数据构建为一个新的DataFrame,然后两个DataFrame拼起来。可以用append方法,不过不太会用,提供一种方法:
test_dict_df.append(pd.DataFrame([new_line],columns=['id','name','physics']))
本想一口气把CURD全写完,没想到写到这里就好累。。。其他后续新开篇章在写吧。
相关代码:(https://github.com/dataSnail/blogCode/blob/master/python_curd/python_curd_create.ipynb)(在DataFrame中删除N列或者N行)(在DataFrame中查询某N列或者某N行)(在DataFrame中修改数据)
来源:https://www.cnblogs.com/datasnail/p/9675410.html
猜你喜欢
- python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,
- 什么是网络?网络是由节点和连线构成,表示诸多对象及其相互联系。在数学上,网络是一种图,一般认为专指加权图。网络除了数学定义外,还有具体的物理
- 可以利用in运算符来进行判断,如果在指定的序列中找到值返回True,否则返回False。运算符not in表示如果在指定的序列中没有找到值返
- 实例代码:import tkinter as tk import tkinter.filedialogimport cv2def choos
- 如何在ADO中客户端利用好缓存技术?具体应用见下例:global.asa< !--METADATA TYPE=&q
- Form介绍在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。与此同时我们在好多
- 前言pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行
- 用Python对数学函数进行求值、求偏导from sympy import *# x = Symbol("x")# y
- Python中的数据可视化matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地
- 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。from math
- 本文实例讲述了Python使用正则表达式抓取网页图片的方法。分享给大家供大家参考,具体如下:#!/usr/bin/pythonimport
- python+selenium编写实现爬虫过程:1.爬虫循环处理table表,2.table表分页处理,3.网页table所有内容循环处理4
- 在Oracle SQL的where子句中传入字符类型参数'19-11月-08',使得可以直接和日期类型比较,或者转换一下同日
- 1.数据是什么?在 Python 以及其他所有面向对象编程语言中,类都是对数据的构成(状态)以及数据 能做什么(行为)的描述。由于类的使用者
- <input name="a" type="checkbox"
- Pytorch的backward()函数假若有多个loss函数,如何进行反向传播和更新呢? x = torch.tensor(2.0, re
- display text in large ASCII art fonts 显示大ASCII艺术字体这种东西在源码声明或者软件初始化控制台打
- 编码格式常见的编码格式:Python的解释器使用的是Unicode(内存).py文件在磁盘上使用UTF-8(外存)更改编码格式一般形式为在程
- 一、背景:在平时工作中有遇到端口检测,查看服务端特定端口是否对外开放,常用nmap,tcping,telnet等,同时也可以利用站长工具等w
- 前言大家应该都有所体会,在不同的项目可能会使用不同的Django版本,兼任性是大问题,如果不幸要去接手不同版本的项目,比较惨烈!如果想重装一