pandas之基础操作

一、两种核心数据结构的创建

  

'''
    pandas基础操作
'''
import pandas as pd
import numpy as np

# 创建Series类型的数据
p1 = pd.Series([90, 86, 70], index=['leo', 'kate', 'john'])
print(p1)
dict = {'leo': 90, 'kate': 86, 'john': 70}
p2 = pd.Series(dict)
print(p2)
print('==========================')
p3 = pd.Series(np.random.randn(5), index=list('ABCDE'))
print(p3)
p4 = pd.Series(np.random.normal(size=(5,)), index=list('ABCDE'))
print(p4)
p5 = pd.Series(6)
print(p5)

# 创建DataFrame类型的数据
data = [
    ['张三', 29, 69],
    ['王五', 20, 86],
    ['李四', 25, 88],
]
q = pd.DataFrame(data, index=[1, 2, 3], columns=['姓名', '年龄', '分数'])
print(q)

# 创建时间
date = pd.date_range('20100101', periods=6)
print(date)
df1 = pd.DataFrame(np.random.randn(6, 4), index=date, columns=list('abcd'))
print(df1)

df2 = pd.DataFrame(np.random.normal(size=(6, 4)), index=date, columns=['a', 'b', 'c', 'd'])
print(df2)



输出结果:

leo     90
kate    86
john    70
dtype: int64
leo     90
kate    86
john    70
dtype: int64
==========================
A    1.159360
B   -0.666339
C    0.308588
D   -0.506679
E    1.512920
dtype: float64
A   -0.490887
B    1.112884
C    2.213500
D   -1.235730
E   -0.512336
dtype: float64
0    6
dtype: int64
   姓名  年龄  分数
1  张三  29  69
2  王五  20  86
3  李四  25  88
DatetimeIndex(['2010-01-01', '2010-01-02', '2010-01-03', '2010-01-04',
               '2010-01-05', '2010-01-06'],
              dtype='datetime64[ns]', freq='D')
                   a         b         c         d
2010-01-01 -0.823523 -1.409990  0.226064  1.179078
2010-01-02 -1.038028 -0.471260  1.400937  1.307517
2010-01-03  0.020108 -0.965482  0.179132 -0.048759
2010-01-04 -0.401916 -0.354500  1.428424 -0.561267
2010-01-05 -1.072954  0.601991 -0.209088 -1.012752
2010-01-06 -0.362519  0.068684  0.429000  0.483278
                   a         b         c         d
2010-01-01  0.190991  0.070639  2.418837 -0.697829
2010-01-02  0.564987 -0.793603 -0.140782 -1.035729
2010-01-03  0.082700  0.250710  0.504365 -0.801025
2010-01-04  0.769330 -1.462820  1.213319 -1.516593
2010-01-05  0.940503  0.634657 -0.952838  1.675215
2010-01-06  0.520664  0.795519 -0.346242 -0.543367

 

二、数据结构属性

  

'''
    pandas中核心数据结构的基本属性
        1.Series数据结构
        2.DataFrame数据结构
'''
import pandas as pd

# Series基础属性
s1 = pd.Series([90, 86, 70], index=['leo', 'kate', 'john'])
print(s1)
# 打印元素
print(s1.values)
#打印索引
print(s1.index)
# 打印类型
print(s1.dtype)
# 打印维度
print(s1.ndim)
# 打印数据形状
print(s1.shape)

输出结果:
leo     90
kate    86
john    70
dtype: int64
[90 86 70]
Index(['leo', 'kate', 'john'], dtype='object')
int64
1
(3,)

三、数据查找

  

'''
    数据的增删改查
        查找:
            1.对Series数据查找,主要通过索引:
                1>通过index对应的标签查找
                2>通过绝对位置查看,可以是绝对位置的数字、列表、或者表达式等

            2.对DataFrame
                1>对单列数据的访问(两种方式):DataFrame的单列数据为一个Series。根据DataFrame的定义可以 知晓DataFrame是一个带有标签的二维数组,
                                        每个标签相当每一列的列名。df.a df['a']
                2>对多列数据访问:访问DataFrame多列数据可以将多个列索引名称视为一个列表,df[['a','b']]
                3>对行数据访问:
                    3.1 如果只是需要访问DataFrame某几行数据的实现方式则采用数组的选取方式,使用“:”。
                    3.2 head和tail也可以得到多行数据,但是用这两种方法得到的数据都是从开始或者末尾获取的连续数据。
                        默认参数为访问5行,只要在方法后方的“()”中填入访问行数即可实现目标行数的查看。

                4>高级查看方法---loc,iloc方法(速度快)DataFrame常用查找方法
                    4.1 loc方法:是针对DataFrame索引名称的切片方法,如果传入的不是索引名称,那么切片操作将无法执行。
                                利用loc方法,能够实现所有单层索引切片操作。loc方法使用方法如下:
                                    DataFrame.loc[行索引名称或条件, 列索引名称]
                    4.2 iloc方法:和loc区别是iloc接收的必须是行索引和列索引的位置。iloc方法的使用方法如下:
                                    DataFrame.iloc[行索引位置, 列索引位置]
                    4.3 两种方法使用方式:
                        1>使用loc方法和iloc实现多列切片,其原理的通俗解释就是将多列的列名或者位置作为一个列表或者数据传入。
                            使用loc,iloc方法可以取出DataFrame中的任意数据。
                        2>loc内部还可以传入表达式,结果会返回满足表达式的所有值。
                        3>loc更加灵活多变,代码的可读性更高,iloc的代码简洁,但可读性不高。
                            具体在数据分析工作中使用哪一种方法,根据情况而定,大多数时候建议使用loc方法。
                        4>在loc使用的时候内部传入的行索引名称如果为一个区间,则前后均为闭区间;
                            iloc方法使用时内部传入的行索引位置或列索引位置为区间时,则为前闭后开区间。
                5>ix方法:切片方法
                    5.1 ix方法更像是loc和iloc两种切片方法的融合。ix方法在使用时既可以接收索引名称也可以接收索引位置。
                        其使用方法如下:
                            DataFrame.ix[行索引的名称或位置或者条件,列索引名称或位置]
                    5.2 使用ix方法时有个注意事项,第一条,当索引名称和位置存在部分重叠时,ix默认优先识别名称。
                    5.3 控制ix方法需要注意以下几点:
                        1>使用列索引名称,而非列索引位置。主要用来保证代码可读性.
                        2>使用列索引位置时,需要注解。同样保证代码可读性.
                        3>除此之外ix方法还有一个缺点,就是在面对数据量巨大的任务的时候,其效率会低于loc和iloc方法,
                            所以在日常的数据分析工作中建议使用loc和iloc方法来执行切片操作.


'''
import pandas as pd
import numpy as np
import warnings

warnings.filterwarnings('ignore')

# Serise查找
s1 = pd.Series([90, 86, 70], index=['leo', 'kate', 'john'])
print(s1)
# 绝对位置查找
print(s1[0])
# 通过标签查找
print(s1['john'])
# 通过列表查找
print(s1[['john', 'kate']])
print(s1[[0, 2]])
# 通过表达式查找
print(s1[s1 > 80])
print('==============================')

date = pd.date_range('20100101', periods=6)
df1 = pd.DataFrame(np.random.randn(6, 4), index=date, columns=list('abcd'))
print(df1)

# DataFrame数据的单列查找
print(df1.a)
print(df1['a'])

# DataFrame数据的多列查找
print(df1[['a', 'c']])

# 使用‘:’读取行数据,可以是单行或者多行
print(df1[3:4])
print(df1[:4])
# 使用head()函数读取前多少行,默认前五行
print(df1.head(3))

# 使用tail()函数读取后多少行,默认后五行
print(df1.tail(3))

# 使用loc[,]方法查找
print(df1.loc['2010-01-01':'2010-01-03', 'a':'c'])
print(df1.loc['2010-01-01':'2010-01-03', ['a', 'd']])
print(df1.loc[df1.index < '2010-01-04'])
print(df1.loc[df1.index < '20100104'])
# 使用iloc[,]方法查找
print(df1.iloc[0:3, [0, 2, 3]])
print(df1.iloc[[2, 4, 5], 2:])
# 使用ix[,]方法查找
print(df1.ix['2010-01-01': '2010-01-04', 0:3])







输出结果:
leo     90
kate    86
john    70
dtype: int64
90
70
john    70
kate    86
dtype: int64
leo     90
john    70
dtype: int64
leo     90
kate    86
dtype: int64
==============================
                   a         b         c         d
2010-01-01 -1.165119  0.678715 -0.485707  1.027487
2010-01-02 -0.044734 -1.702172  0.567219  0.091994
2010-01-03 -0.294266 -0.183854  0.380807  0.196074
2010-01-04 -0.305703 -2.452826  0.833772  0.284876
2010-01-05  0.377458 -0.859994  0.186893  0.844783
2010-01-06  1.105398  0.434033  0.141374 -1.101191
2010-01-01   -1.165119
2010-01-02   -0.044734
2010-01-03   -0.294266
2010-01-04   -0.305703
2010-01-05    0.377458
2010-01-06    1.105398
Freq: D, Name: a, dtype: float64
2010-01-01   -1.165119
2010-01-02   -0.044734
2010-01-03   -0.294266
2010-01-04   -0.305703
2010-01-05    0.377458
2010-01-06    1.105398
Freq: D, Name: a, dtype: float64
                   a         c
2010-01-01 -1.165119 -0.485707
2010-01-02 -0.044734  0.567219
2010-01-03 -0.294266  0.380807
2010-01-04 -0.305703  0.833772
2010-01-05  0.377458  0.186893
2010-01-06  1.105398  0.141374
                   a         b         c         d
2010-01-04 -0.305703 -2.452826  0.833772  0.284876
                   a         b         c         d
2010-01-01 -1.165119  0.678715 -0.485707  1.027487
2010-01-02 -0.044734 -1.702172  0.567219  0.091994
2010-01-03 -0.294266 -0.183854  0.380807  0.196074
2010-01-04 -0.305703 -2.452826  0.833772  0.284876
                   a         b         c         d
2010-01-01 -1.165119  0.678715 -0.485707  1.027487
2010-01-02 -0.044734 -1.702172  0.567219  0.091994
2010-01-03 -0.294266 -0.183854  0.380807  0.196074
                   a         b         c         d
2010-01-04 -0.305703 -2.452826  0.833772  0.284876
2010-01-05  0.377458 -0.859994  0.186893  0.844783
2010-01-06  1.105398  0.434033  0.141374 -1.101191
                   a         b         c
2010-01-01 -1.165119  0.678715 -0.485707
2010-01-02 -0.044734 -1.702172  0.567219
2010-01-03 -0.294266 -0.183854  0.380807
                   a         d
2010-01-01 -1.165119  1.027487
2010-01-02 -0.044734  0.091994
2010-01-03 -0.294266  0.196074
                   a         b         c         d
2010-01-01 -1.165119  0.678715 -0.485707  1.027487
2010-01-02 -0.044734 -1.702172  0.567219  0.091994
2010-01-03 -0.294266 -0.183854  0.380807  0.196074
                   a         b         c         d
2010-01-01 -1.165119  0.678715 -0.485707  1.027487
2010-01-02 -0.044734 -1.702172  0.567219  0.091994
2010-01-03 -0.294266 -0.183854  0.380807  0.196074
                   a         c         d
2010-01-01 -1.165119 -0.485707  1.027487
2010-01-02 -0.044734  0.567219  0.091994
2010-01-03 -0.294266  0.380807  0.196074
                   c         d
2010-01-03  0.380807  0.196074
2010-01-05  0.186893  0.844783
2010-01-06  0.141374 -1.101191
                   a         b         c
2010-01-01 -1.165119  0.678715 -0.485707
2010-01-02 -0.044734 -1.702172  0.567219
2010-01-03 -0.294266 -0.183854  0.380807
2010-01-04 -0.305703 -2.452826  0.833772

 

上一篇:pandas-16 pd.merge()的用法


下一篇:多线程将excel数据写入mysql