Pandas模块是Python用于数据导入及整理的模块,对数据挖掘前期数据的处理工作十分有用,因此这些基础的东西还是要好好的学学。Pandas模块的数据结构主要有两:1、Series ;2、DataFrame
先了解一下Series结构。

a.创建
a.1、pd.Series([list],index=[list])//以list为参数,参数为一list;index为可选参数,若不填则默认index从0开始;若添则index长度与value长度相等

import pandas as pd

s=pd.Series([1,2,3,4,5],index= ['a','b','c','f','e'])

print(s)

a    1
b 2
c 3
f 4
e 5
dtype: int64 s=pd.Series({'a':3,'b':4,'c':5,'f':6,'e':8}) print(s) a 3
b 4
c 5
e 8
f 6
dtype: int64 import numpy as np v=np.random.random_sample(50) s=pd.Series(v) print (s.head()) print (s.tail(3)) 0 0.785486
1 0.272487
2 0.182683
3 0.196650
4 0.654694
dtype: float64
47 0.701705
48 0.897344
49 0.478941
dtype: float64

Series相当于数组numpy.array类似

pandas中的isnull和notnull函数可以用于检测缺失数据

Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。

Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切

DataFrame相当于有表格,有行表头和列表头

a=pd.DataFrame(np.random.rand(4,5),index=list("ABCD"),columns=list('abcde'))

print (a)

          a         b         c         d         e
A 0.484914 0.256542 0.702622 0.997324 0.834293
B 0.802564 0.660622 0.246160 0.936310 0.841891
C 0.073188 0.369238 0.631770 0.967714 0.950021
D 0.136728 0.270609 0.102326 0.343002 0.789243 #增加列或修改列 a['f']=[1,2,3,4] a['e']=10 print(a) a b c d e f
A 0.484914 0.256542 0.702622 0.997324 10 1
B 0.802564 0.660622 0.246160 0.936310 10 2
C 0.073188 0.369238 0.631770 0.967714 10 3
D 0.136728 0.270609 0.102326 0.343002 10 4 #增加行或修改行 a.ix['D']=10 print(a) a b c d e f
A 0.484914 0.256542 0.702622 0.997324 10 1
B 0.802564 0.660622 0.246160 0.936310 10 2
C 0.073188 0.369238 0.631770 0.967714 10 3
D 10.000000 10.000000 10.000000 10.000000 10 10 E:\Program Files\Anaconda3\envs\tensorflow_py35\lib\site-packages\ipykernel\__main__.py:2: DeprecationWarning:
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
from ipykernel import kernelapp as app print (a[['b','e']]) #取'b','e'列 print (a.loc['A':'D',['a','c','f']]) #取'A'-'D'行'a','c','f'列 b e
A 0.256542 10
B 0.660622 10
C 0.369238 10
D 10.000000 10
a c f
A 0.484914 0.702622 1
B 0.802564 0.246160 2
C 0.073188 0.631770 3
D 10.000000 10.000000 10 #减少行或减少列 a=a.drop(['C','D']) #删除'C'行和'D' print (a) a=a.drop('a',axis=1) #删除'a'列,axis=0表示行,axis=1表示列 print(a) a b c d e f
A 0.484914 0.256542 0.702622 0.997324 10 1
B 0.802564 0.660622 0.246160 0.936310 10 2
b c d e f
A 0.256542 0.702622 0.997324 10 1
B 0.660622 0.246160 0.936310 10 2 #缺省值处理 a=pd.DataFrame(np.random.rand(4,6),index=list('EFGH'),columns=list('abcdef')) print(a) a.iloc[2,3]=None #取第三行第4列值设为None a.iloc[3,0]=None #取第五行第1列值设为None print(a) a b c d e f
E 0.559810 0.470429 0.966709 0.096261 0.220432 0.878908
F 0.567841 0.237288 0.117921 0.604651 0.055591 0.272852
G 0.267982 0.053754 0.410986 0.310045 0.058950 0.773051
H 0.595787 0.932286 0.839897 0.757793 0.554378 0.417178
a b c d e f
E 0.559810 0.470429 0.966709 0.096261 0.220432 0.878908
F 0.567841 0.237288 0.117921 0.604651 0.055591 0.272852
G 0.267982 0.053754 0.410986 NaN 0.058950 0.773051
H NaN 0.932286 0.839897 0.757793 0.554378 0.417178 #缺省值处理 a=a.fillna(5) #缺省值处(即NaN处填充为5) print (a) #缺省值去行即有缺省值的把这一行都去掉 a.iloc[2,3]=None a.iloc[3,0]=None print (a) a=a.dropna() #删除缺省值为NaN的行 print (a) a b c d e f
E 0.559810 0.470429 0.966709 0.096261 0.220432 0.878908
F 0.567841 0.237288 0.117921 0.604651 0.055591 0.272852
G 0.267982 0.053754 0.410986 5.000000 0.058950 0.773051
H 5.000000 0.932286 0.839897 0.757793 0.554378 0.417178
a b c d e f
E 0.559810 0.470429 0.966709 0.096261 0.220432 0.878908
F 0.567841 0.237288 0.117921 0.604651 0.055591 0.272852
G 0.267982 0.053754 0.410986 NaN 0.058950 0.773051
H NaN 0.932286 0.839897 0.757793 0.554378 0.417178
a b c d e f
E 0.559810 0.470429 0.966709 0.096261 0.220432 0.878908
F 0.567841 0.237288 0.117921 0.604651 0.055591 0.272852

python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix :

那么这三种选取数据的方式该怎么选择呢?

一、当每列已有column name时,用 df [ 'a' ] 就能选取出一整列数据。如果你知道column names 和index,且两者都很好输入,可以选择 .loc

  1. df.loc[0, 'a']
  2. df.loc[0:3, ['a', 'b']]
  3. df.loc[[1, 5], ['b', 'c']]

由于这边我们没有命名index,所以是DataFrame自动赋予的,为数字0-9

二、如果我们嫌column name太长了,输入不方便,有或者index是一列时间序列,更不好输入,那就可以选择 .iloc了。这边的 i 我觉得代表index,比较好记点。

  1. df.iloc[1,1]
  2. df.iloc[0:3, [0,1]]
  3. df.iloc[[0, 3, 5], 0:2]

iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取。

三、.ix 的功能就更强大了,它允许我们混合使用下标和名称进行选取。 可以说它涵盖了前面所有的用法。基本上把前面的都换成df.ix 都能成功,但是有一点,就是df.ix [ [ ..1.. ], [..2..] ],  1框内必须统一,必须同时是下标或者名称

df=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]})

df.ix[df.A>1,'B']= -1

print (df)

   A  B  C
0 1 5 1
1 2 -1 1
2 3 -1 1
3 4 -1 1 df=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]}) df["then"]=np.where(df.A<3,1,0) print (df) A B C then
0 1 5 1 1
1 2 6 1 1
2 3 7 1 0
3 4 8 1 0 df=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]}) df=df.loc[df.A>2] print (df) A B C
2 3 7 1
3 4 8 1

DataFrame可以通过set_index方法,可以设置单索引和复合索引。

reset_index可以还原索引,从新变为默认的整型索引。

python pandas.Series&&DataFrame&& set_index&reset_index的更多相关文章

  1. python. pandas(series,dataframe,index) method test

    python. pandas(series,dataframe,index,reindex,csv file read and write) method test import pandas as ...

  2. python pandas ---Series,DataFrame 创建方法,操作运算操作(赋值,sort,get,del,pop,insert,+,-,*,/)

    pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的, 导入如下: from panda ...

  3. Python Pandas -- Series

    pandas.Series class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath ...

  4. python基础:如何使用python pandas将DataFrame转换为dict

    之前在知乎上看到有网友提问,如何将DataFrame转换为dict,专门研究了一下,pandas在0.21.0版本中是提供了这个方法的.下面一起学习一下,通过调用help方法,该方法只需传入一个参数, ...

  5. pandas数据结构:Series/DataFrame;python函数:range/arange

    1. Series Series 是一个类数组的数据结构,同时带有标签(lable)或者说索引(index). 1.1 下边生成一个最简单的Series对象,因为没有给Series指定索引,所以此时会 ...

  6. 利用Python进行数据分析:【Pandas】(Series+DataFrame)

    一.pandas简单介绍 1.pandas是一个强大的Python数据分析的工具包.2.pandas是基于NumPy构建的.3.pandas的主要功能 --具备对其功能的数据结构DataFrame.S ...

  7. python 数据处理学习pandas之DataFrame

    请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...

  8. 【跟着stackoverflow学Pandas】 - Adding new column to existing DataFrame in Python pandas - Pandas 添加列

    最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...

  9. pandas set_index() reset_index()

    set_index() 官方定义: 使用一个或多个现有列设置索引,   默认情况下生成一个新对象 DataFrame.set_index(keys, drop=True, append=False,  ...

随机推荐

  1. Spring技术内幕:设计理念和整体架构概述(转)

    程序员都很崇拜技术大神,很大一部分是因为他们发现和解决问题的能力,特别是线上出现紧急问题时,总是能够快速定位和解决. 一方面,他们有深厚的技术基础,对应用的技术知其所以然,另一方面,在采坑的过程中不断 ...

  2. 查看锁信息(开启InnoDB监控)

    当前mysql版本:5.6.21 一.背景 在mysql处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信 ...

  3. hdu-4027线段树练习

    title: hdu-4027线段树练习 date: 2018-10-10 18:07:11 tags: acm 算法 刷题 categories: ACM-线段树 # 概述 这道线段树的题可以说是我 ...

  4. Win10 重装后,必须修改的设置

    作为一个程序猿,系统易用性是相当重要,每次重装WIN10 都会遇到一头包的问题,比如不能远程,打开文件各种提示需要管理员权限(mlgb很想骂人,我明明是管理员权限) ,然后开了管理员权限,结果又不能用 ...

  5. read()函数的困惑

    #define BUF_SIZE 10 int main() { int cnt; char buf[BUF_SIZE]; cnt = read(STDIN_FILENO, buf, BUF_SIZE ...

  6. Javascript:window.close()不起作用?

    一般的窗口关闭的JS如下写法: window.close() 但是呢,chrome,firefox等中有时候会不起作用. 改为下面的写法: window.open("about:blank& ...

  7. 问题记录:未设置为接受端口“文件和打印机共享(SMB)”上的连接

    解决办法: 网络(右击)——属性——本地连接(右击)——属性——此连接使用下列选项——Microsoft网络的文和打印共享(打上勾)

  8. Problem F: 铺地砖

    Description 元旦过去了,新年大酬宾活动也已经告一段落了.陈盖历望着堆在仓库的瓷砖,很无聊的他把这些瓷砖裁成很多1X1 1X2 1X3的小瓷砖,然后他把这些小瓷砖排在地上画的一个1*n的长方 ...

  9. 使用ViewPager实现android软件使用向导的功能

    现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了. 先看下效果图: 首先需要一个布局文件,是FlameLayout组成的,里面包 ...

  10. C#高级编程9-第4章 继承

    继承是面向对象的一大特征.要深刻学习继承,需要学会使用调试的技巧来学习它,因为它比较抽象. 继承 继承是指一个具体的类型直接使用另一类型的某些数据成员或函数成员,继承的类是基类(父类),被继承的类是派 ...