Pandas Series和DataFrame的基本概念
1,创建Series
1.1,通过iterable创建Series
Series接收参数是Iterable,不能是Iterator
pd.Series(Iterable)
可以多加一个index参数,index可以接收Iterator或者Iterable:
>>> pd.Series(('a', 'b'), index=iter(range(2)))
0 a
1 b
dtype: object
1.2,通过字典创建Series
key是索引:
>>> pd.Series({'a':1, 'b':2})
a 1
b 2
dtype: int64
2,Series常用方法
s = pd.Series([1, 2, 3], index=list('abc'))
Series也能像字典那样遍历:
for index, value in s.items():
print(index, value, end=';') # a 1;b 2;c 3;
和字典一样,Series的in测试默认是index操作,如果想对values操作需加上values:
print('a' in s) # True
print(1 in s.values) # True
获取series的values组成的列表:
print(s.tolist()) # [1, 2, 3]
3,创建DataFrame
3.1,通过iterable组成的列表创建DataFrame
[it1, it2, ..., itN],每个it是一行数据,缺省的index, columns是从0开始的int
>>> pd.DataFrame([(1, 2, 3), [4, 5, 6], range(3, 6), 'abc'])
0 1 2
0 1 2 3
1 4 5 6
2 3 4 5
3 a b c
it长度不等时会自动用NaN或者None填充:
>>> pd.DataFrame([(1, 2), [4, 5], range(3, 6), 'abc'])
0 1 2
0 1 2 None
1 4 5 None
2 3 4 5
3 a b c
>>> pd.DataFrame([(1, 2, 3), [4, 5, 6], range(3, 6), 'ab'])
0 1 2
0 1 2 3.0
1 4 5 6.0
2 3 4 5.0
3 a b NaN
指定index和columns:
>>> pd.DataFrame([(1, 2, 3), [4, 5, 6], range(3, 6), 'abc'], index=range(4), columns=list('ABC'))
A B C
1 1 2 3
2 4 5 6
3 3 4 5
4 a b c
3.2,通过numpy矩阵创建DataFrame
np_data = np.random.random((3, 4))
np_data = np.arange(12).reshape(3, 4)
np_data = np.ones((3, 4))
df = pd.DataFrame(np_data)
3.3,通过“一键多值”创建DataFrame
创建dataframe,键是列名:
>>> pd.DataFrame({'a':[1, 2, 3], 'b': [4, 5, 6]})
a b
0 1 4
1 2 5
2 3 6
可以设置index:
>>> pd.DataFrame({'a':[1, 2, 3], 'b': [4, 5, 6]}, index=list('456'))
a b
4 1 4
5 2 5
6 3 6
创建df时更改columns会出问题:
>>> pd.DataFrame({'a':[1, 2, 3], 'b': [4, 5, 6]}, columns=list('AB'))
Empty DataFrame
Columns: [A, B]
Index: []
这种创建方法可以看做是按列创建df,需要事先建很多列表,最后一次性赋给df
3.4,通过“字典列表”创建DataFrame
pd.DataFrame([{'a':1 , 'b': 4}, {'a':2 , 'b': 5}, {'a':3 , 'b': 6}])
a b
0 1 4
1 2 5
2 3 6
这种方法只需要创建一个列表,然后不停往该列表里添加字典即可,推荐!
3.5,df.loc,df.iloc,df.ix等逐行/逐单元格创建DataFrame
事先创建好dataframe,然后用dfdf.loc,df.iloc,df.ix逐行逐单元格增加数据,例如:
df = pd.DataFrame()
for index, item in enumerate(zip('abcde', range(5))):
df.loc[index, 'A'] = item[0]
df.loc[index, 'B'] = item[1]
效率非常低,不推荐
4,SettingWithCopyWarning
对DataFrame的弱引用对象进行拷贝进行赋值会触发SettingWithCopyWarning。
通过bool序列筛选拿到的是dataframe的弱引用对象。对弱引用对象进行修改时,不会影响到原来的dataframe。
>>>df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list('ABCD'))
>>>df1 = df[df['B'] > 2]
>>>df1.is_copy
<weakref at 0x08B5F6C0; to 'DataFrame' at 0x00CC5070>
>>>df1['A'] = 0
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
>>>df1 # df1会改变
A B C D
1 0 5 6 7
2 0 9 10 11
3 0 13 14 15
>>>df # df不会改变
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
df1是df的弱引用拷贝,对df1进行赋值会触发SettingWithCopyWarning。
如果df1 = df.copy()不会触发该警告。
另外,如果是获取一个列,则拿到的是视图,并不是弱引用,对该视图进行的修改会反映到源dataframe:
>>>df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=list('ABCD'))
>>>a = df['A']
>>>a.loc[1] = 55
>>>a
A B C D
0 0 1 2 3
1 55 5 6 7
2 8 9 10 11
Pandas Series和DataFrame的基本概念的更多相关文章
- Pandas Series 与 DataFrame 数据创建
>>> import pandas as pd >>> import numpy as np >>> print(np.__version__), ...
- pandas Series和dataframe
DataFrame是一个表格型数据结构,与Series不同的是,DataFrame可以含有一组或者有序的列,每列可以使不同的值的类型,它可以被看做成Series的字典.
- pandas数组(pandas Series)-(2)
pandas Series 比 numpy array 要强大很多,体现在很多方面 首先, pandas Series 有一些方法,比如: describe 方法可以给出 Series 的一些分析数据 ...
- pandas-21 Series和Dataframe的画图方法
pandas-21 Series和Dataframe的画图方法 ### 前言 在pandas中,无论是series还是dataframe都内置了.plot()方法,可以结合plt.show()进行很方 ...
- 02. Pandas 1|数据结构Series、Dataframe
1."一维数组"Series Pandas数据结构Series:基本概念及创建 s.index . s.values # Series 数据结构 # Series 是带有标签的一 ...
- Pandas中Series和DataFrame的索引
在对Series对象和DataFrame对象进行索引的时候要明确这么一个概念:是使用下标进行索引,还是使用关键字进行索引.比如list进行索引的时候使用的是下标,而dict索引的时候使用的是关键字. ...
- Python数据分析-Pandas(Series与DataFrame)
Pandas介绍: pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. Pandas的主要功能: 1)具备对其功能的数据结构DataFrame.Series 2)集成时间序 ...
- pandas学习series和dataframe基础
PANDAS 的使用 一.什么是pandas? 1.python Data Analysis Library 或pandas 是基于numpy的一种工具,该工具是为了解决数据分析人物而创建的. 2.p ...
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
一.reindex() 方法:重新索引 针对 Series 重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...
随机推荐
- 取模性质,快速幂,快速乘,gcd和最小公倍数
一.取模运算 取模(取余)运算法则: 1. (a+b)%p=(a%p+b%p)%p; 2.(a-b)%p=(a%p-b%p)%p; 3.(a*b)%p=(a%p * b%p)%p; 4.(a^b)%p ...
- java支付宝接口开发
在线支付接入支付宝,首先需要去官网申请开发者账号,具体步骤如下: 一.打开官网 1.直接打开链接https://open.alipay.com/platform/home.htm进入 2.百度搜索蚂蚁 ...
- [BZ4923][Lydsy1706月赛]K小值查询
K小值查询 题面 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. Input ...
- sql server中的开窗函数over、视图、事物
一.开窗函数over的作用有两个: 1.排序order by,row_number,翻页 2.划区partition by,结合聚合函数针对某部分数据进行汇总 翻页的sql server 语句: an ...
- Linq高级查询,分页查询及查询分页结合
一.高级查询与分页查询 1.以...开头 StartsWith Repeater1.DataSource=con.Users.Where(r=>r.Nickname.StartsWith( ...
- 2018-2019-2 网络对抗技术 20165335 Exp4 恶意代码分析
实验内容: 一.使用schtacks进行系统运行监控,使用sysmon工具监控系统的具体进程,使用各种工具进行监控,并针对软件的启动回连,安装到目标机,以及其他的控制行为的分析,同时,对主机的注册表, ...
- 使用docker试用各种软件及docker-ES设置
试用开源软件的优劣势 由于现在容器化的热度,大部分软件都有docker official镜像,那么使用docker就是试用软件很好的方法: 优势: 1.可以免去安装部署的过程. 2.不会对当前系统环境 ...
- 文件下载的ie11兼容性优化
在 http://www.cnblogs.com/sunshine6/p/8296945.html 中有说关于前后端分离时如何实现文件下载的功能,但是过完年回来,同事告诉我这个方式在ie11上存在不兼 ...
- Pytrhon结束死循环的子线程
Python在子线程无线循环的过程中,如果直接ctrl+c结束程序的话,虽然程序可以结束,但是会导致子线程资源无法回收,一般情况不会有太大影响,但是使用TCP通信的时候,子线程是占用特定的端口的,在资 ...
- fork项目适合全局替换注释说明
sublimeText 正则替换 (@date) (\d+-\d+-\d+)$1 2016-11-17 (@author) (\w+)$1 youName