Python之Pandas使用知识汇总(持续更新)

一、Pandas简介

Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法,给Python提供强大而高效的数据分析环境。
Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。
Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。

二、环境

Pandas是Python的一个外部资源包,所以其使用需要在Python的使用环境下,有关Python的安装,可以查看这里Python相关安装汇总(持续更新)

三、使用

3.1 数据结构

3.1.1 Series

Series是Pandas中的一维数据结构,类似于Python中的列表和Numpy中的Ndarray,不同之处在于:Series是一维的,能存储不同类型的数据,有一组索引与元素对应。因为Series可以保存不同的数据类型,使得Pandas在处理表格和混杂类型的数据方面有着广泛的应用。
用例:

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

# Series
obj = Series([4, 7, -5, 3])
print("Series有索引的一维数组\n\robj=\n\r", obj)
print("\n\r1 数组的值\n\robj.values=", obj.values)
print("\n\r2 数组的索引\n\robj.index=", obj.index)

obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print("\n\r3 指定索引的数组\n\robj2=\n\r", obj2)
print("\n\r4 数组的索引\n\robj2.index=", obj2.index)
print("\n\r5 索引a的值\n\robj2['a']=", obj2['a'])

obj2['d'] = 6

print("\n\r6 输出给定的索引值\n\robj2[['c', 'a', 'd']]=\n\r", obj2[['c', 'a', 'd']])
print("\n\r7 数组元素大于0的索引及其值\n\robj2[obj2 > 0]=\n\r", obj2[obj2 > 0])
print("\n\r8 数组元素乘以2\n\robj2 * 2=\n\r", obj2 * 2)
print("\n\r9 数组元素的自然对数\n\rnp.exp(obj2)=\n\r", np.exp(obj2))

print("\n\r10 是否有索引b\n\r'b' in obj2=", 'b' in obj2)
print("\n\r是否有索引e\n\r'e' in obj2=", 'e' in obj2)

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = Series(sdata)
print("\n\r11 由索引数组创建series数组\n\robj3=\n\r", obj3)

states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = Series(sdata, index=states)
print("\n\r12 更改索引顺序,无索引则丢失数据\n\robj4=\n\r", obj4)

print("\n\r13 元素为空的判断\n\risnull(obj4)=\n\r", pd.isnull(obj4))
print("\n\r元素不为空的判断\n\rnotnull(obj4)=\n\r", pd.notnull(obj4))
print("\n\r元素为空的判断的另一种表达\n\robj4.isnull()=\n\r", obj4.isnull())

print("\n\robj3=\n\r", obj3)
print("\n\robj4=\n\r", obj4)
print("\n\r14 series数组合并,索引相同求和,不同添加\n\robj3 + obj4=\n\r", obj3 + obj4)

obj4.name = 'population'
obj4.index.name = 'state'
print("\n\r15 添加series数组的名称和索引\n\robj4=\n\r", obj4)

obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
print("\n\r16 更改索引值\n\robj=\n\r", obj)

结果:

Series有索引的一维数组
obj=
 0    4
1    7
2   -5
3    3
dtype: int64

1 数组的值
obj.values= [ 4  7 -5  3]

2 数组的索引
obj.index= RangeIndex(start=0, stop=4, step=1)

3 指定索引的数组
obj2=
 d    4
b    7
a   -5
c    3
dtype: int64

4 数组的索引
obj2.index= Index(['d', 'b', 'a', 'c'], dtype='object')

5 索引a的值
obj2['a']= -5

6 输出给定的索引值
obj2[['c', 'a', 'd']]=
 c    3
a   -5
d    6
dtype: int64

7 数组元素大于0的索引及其值
obj2[obj2 > 0]=
 d    6
b    7
c    3
dtype: int64

8 数组元素乘以2
obj2 * 2=
 d    12
b    14
a   -10
c     6
dtype: int64

9 数组元素的自然对数
np.exp(obj2)=
 d     403.428793
b    1096.633158
a       0.006738
c      20.085537
dtype: float64

10 是否有索引b
'b' in obj2= True

是否有索引e
'e' in obj2= False

11 由索引数组创建series数组
obj3=
 Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

12 更改索引顺序,无索引则丢失数据
obj4=
 California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

13 元素为空的判断
isnull(obj4)=
 California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

元素不为空的判断
notnull(obj4)=
 California    False
Ohio           True
Oregon         True
Texas          True
dtype: bool

元素为空的判断的另一种表达
obj4.isnull()=
 California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

obj3=
 Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

obj4=
 California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

14 series数组合并,索引相同求和,不同添加
obj3 + obj4=
 California         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN
dtype: float64

15 添加series数组的名称和索引
obj4=
 state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64

16 更改索引值
obj=
 Bob      4
Steve    7
Jeff    -5
Ryan     3
dtype: int64

3.1.2 Dataframe

Dataframe是同时具有行索引和列索引的表格型数据结构

类型说明
二维ndarray数据矩阵,还可以传入行标和列标
由数组、列表或元组组成的字典每个序列会变成DataFrame的一列。所有有序的长度必须相同
NumPy的结构化/记录数组类似于“由数组组成的字典”
由Series组成的字典每个Series会成为一列。如果没有显式指定索引,则各Series的索引会被合并成结果的行索引
由字典组成的字典各内层字典会成为一列。键会被合并成结果的行索引,跟“由Series组成的字典”的情况一样
由列表或元组组成的列表类似于“二维ndarray”
另一个DataFrame该DataFrame的索引将会被沿用,除非显式指定了其他索引
NumPy的MaskedArray类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会变成NA/缺失值

用例:

import numpy as np
from pandas import Series, DataFrame

#dataframe
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)
print("dataframe表格型数组结构\n\rframe=\n\r", frame)

DataFrame(data, columns=['year', 'state', 'pop'])

frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                   index=['one', 'two', 'three', 'four', 'five'])
print("\n\r1 指定行索引index和列索引columns的dataframe数组\n\rframe2=\n\r", frame2)
print("\n\r2 列索引\n\rframe2.columns=", frame2.columns)
print("\n\r3 索引为state的行索引及其值\n\rframe2['state']=\n\r", frame2['state'])
print("\n\r4 索引为year的行索引及其值(第二种表达)\n\rframe2.year=\n\r", frame2.year)
print("\n\r5 行索引为three的列索引及其值\n\rframe2.ix['three']=\n\r", frame2.ix['three'])

frame2['debt'] = 16.5
print("\n\r6 根据列索引插入值\n\rframe2=\n\r", frame2)

frame2['debt'] = np.arange(5.)
print("\n\r7 根据列索引插入元素\n\rframe2=\n\r", frame2)

val = Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
print("\n\rval=\n\r", val)

frame2['debt'] = val
print("\n\r8 根据列索引插入series数组值\n\rframe2=\n\r", frame2)

frame2['eastern'] = frame2.state == 'Ohio'
print("\n\r9 插入列索引作为判断另外一列元素是否满足条件\n\rframe2=\n\r", frame2)

del frame2['eastern']
print("\n\r10 根据列索引删除列,打印列索引名\n\rframe2.columns=\n\r", frame2.columns)

pop = {'Nevada': {2001: 2.4, 2002: 2.9},
       'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = DataFrame(pop)
print("\n\r12 创建dataframe另一种表达\n\rframe3=\n\r", frame3)
print("\n\r13 dataframe转置\n\rframe3.T=\n\r", frame3.T)

DataFrame(pop, index=[2001, 2002, 2003])
pdata = {'Ohio': frame3['Ohio'][:-1],
         'Nevada': frame3['Nevada'][:2]}
print("\n\r14 根据索引创建dataframe数组\n\rDataFrame(pdata)=\n\r", DataFrame(pdata))

frame3.index.name = 'year'; frame3.columns.name = 'state'
print("\n\r15 dataframe数组添加列名和行名\n\rframe3=\n\r", frame3)
print("\n\r16 只打印dataframe元素\n\rframe3.values=\n\r", frame3.values)
print("\n\r17 只打印dataframe元素\n\rframe2.values=\n\r", frame2.values)

结果:

dataframe表格型数组结构
frame=
     state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9

1 指定行索引index和列索引columns的dataframe数组
frame2=
       year   state  pop debt
one    2000    Ohio  1.5  NaN
two    2001    Ohio  1.7  NaN
three  2002    Ohio  3.6  NaN
four   2001  Nevada  2.4  NaN
five   2002  Nevada  2.9  NaN

2 列索引
frame2.columns= Index(['year', 'state', 'pop', 'debt'], dtype='object')

3 索引为state的行索引及其值
frame2['state']=
 one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
Name: state, dtype: object

4 索引为year的行索引及其值(第二种表达)
frame2.year=
 one      2000
two      2001
three    2002
four     2001
five     2002
Name: year, dtype: int64

5 行索引为three的列索引及其值
frame2.ix['three']=
 year     2002
state    Ohio
pop       3.6
debt      NaN
Name: three, dtype: object

6 根据列索引插入值
frame2=
        year   state  pop  debt
one    2000    Ohio  1.5  16.5
two    2001    Ohio  1.7  16.5
three  2002    Ohio  3.6  16.5
four   2001  Nevada  2.4  16.5
five   2002  Nevada  2.9  16.5

7 根据列索引插入元素
frame2=
        year   state  pop  debt
one    2000    Ohio  1.5   0.0
two    2001    Ohio  1.7   1.0
three  2002    Ohio  3.6   2.0
four   2001  Nevada  2.4   3.0
five   2002  Nevada  2.9   4.0

val=
 two    -1.2
four   -1.5
five   -1.7
dtype: float64

8 根据列索引插入series数组值
frame2=
        year   state  pop  debt
one    2000    Ohio  1.5   NaN
two    2001    Ohio  1.7  -1.2
three  2002    Ohio  3.6   NaN
four   2001  Nevada  2.4  -1.5
five   2002  Nevada  2.9  -1.7

9 插入列索引作为判断另外一列元素是否满足条件
frame2=
        year   state  pop  debt  eastern
one    2000    Ohio  1.5   NaN     True
two    2001    Ohio  1.7  -1.2     True
three  2002    Ohio  3.6   NaN     True
four   2001  Nevada  2.4  -1.5    False
five   2002  Nevada  2.9  -1.7    False

10 根据列索引删除列,打印列索引名
frame2.columns=
 Index(['year', 'state', 'pop', 'debt'], dtype='object')

12 创建dataframe另一种表达
frame3=
       Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2000     NaN   1.5

13 dataframe转置
frame3.T=
         2001  2002  2000
Nevada   2.4   2.9   NaN
Ohio     1.7   3.6   1.5

14 根据索引创建dataframe数组
DataFrame(pdata)=
       Ohio  Nevada
2001   1.7     2.4
2002   3.6     2.9

15 dataframe数组添加列名和行名
frame3=
 state  Nevada  Ohio
year               
2001      2.4   1.7
2002      2.9   3.6
2000      NaN   1.5

16 只打印dataframe元素
frame3.values=
 [[2.4 1.7]
 [2.9 3.6]
 [nan 1.5]]

17 只打印dataframe元素
frame2.values=
 [[2000 'Ohio' 1.5 nan]
 [2001 'Ohio' 1.7 -1.2]
 [2002 'Ohio' 3.6 nan]
 [2001 'Nevada' 2.4 -1.5]
 [2002 'Nevada' 2.9 -1.7]]

3.2 索引对象

说明
Index最泛化的Index对象,将轴标签表示为一个由Python对象组成的NumPy数组
Int64Index针对整数的特殊Index
MultiIndex"层次化"索引对象,表示单个轴上的多层索引。可以看做由元组组成的数组
DatetimeIndex存储纳秒级时间戳(用NumPy的datetime64类型表示)
PeriodIndex针对Period数据(时间间隔)的特殊Index

方法

方法说明
append连接另一个Index对象,产生一个新的Index
diff计算差集,并得到一个Index
intersection计算交集
union计算并集
isin计算一个指示各值是否都包含在参数集合中的布尔型数组
delete删除索引i处的元素,并得到新的Index
drop删除传入的值,并得到新的Index
insert将元素插入到索引i处,并得到新的Index
is_monotonic当各元素均大于等于前一个元素时,返回True
is_unique当Index没有重复值时,返回True
unique计算Index中唯一值的数组

用例:

import numpy as np
from pandas import Series, DataFrame
import pandas as pd

#索引对象
obj = Series(range(3), index=['a', 'b', 'c'])
index = obj.index
print("\n\r索引对象\n\rindex=\n\r", index)
print("\n\r1 指定索引\n\rindex[1:]=\n\r", index[1:])

# index[1] = 'd' # 不允许改变索引

index = pd.Index(np.arange(1, 4))
print("\n\r创建索引\n\rindex=", index)
obj2 = Series([1.5, -2.5, 0], index=pd.Index(np.arange(3)))
print("\n\r2 索引判断\n\robj2.index is index=", obj2.index is index)
print("\n\robj2=\n\r", obj2)

pop = {'Nevada': {2001: 2.4, 2002: 2.9},
       'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = DataFrame(pop)
print("\n\rframe3=\n\r", frame3)
print("\n\r3 列索引判断\n\r'Ohio' in frame3.columns=", 'Ohio' in frame3.columns)
print("\n\r4 行索引判断\n\r2003 in frame3.index=", 2003 in frame3.index)

结果:

索引对象
index=
 Index(['a', 'b', 'c'], dtype='object')

1 指定索引
index[1:]=
 Index(['b', 'c'], dtype='object')

创建索引
index= Int64Index([1, 2, 3], dtype='int64')

2 索引判断
obj2.index is index= False

obj2=
 0    1.5
1   -2.5
2    0.0
dtype: float64

frame3=
       Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2000     NaN   1.5

3 列索引判断
'Ohio' in frame3.columns= True

4 行索引判断
2003 in frame3.index= False

3.3 读写文本格式数据

3.3.1 读取文本格式数据

一些用于把表格型数据读取为DataF然而对象的函数

函数说明
read_csv从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号
read_table从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(“\t”)
read_fwf读取定宽列格式数据(也即没有分隔符)
read_clipboard读取剪贴板中的数据,可以看做read_table的剪贴板版。在将网页转换为表格时有用

函数选项
包括以下几种类型:索引,类型推断和数据转换,日期解析,迭代,不规整数据问题

参数说明
path表示文件系统位置、URL、文件型对象的字符串
sep或delimiter用于对行中各字段进行拆分的字符序列或正则表达式
header用作列名的行号。默认为0(第一行),如果没有header行就应该设置None
index_col用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数字组成的列表(层次化索引)
names用于结果的列名列表,结合header=None
skiprows需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)
na_values一组用于替换NA的值
comment用于将注释信息从行尾拆分出去的字符(一个或多个)
parse_dates尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。此外,还可以指定需要解析的一组列号或列名。如果列表的元素为列表或元组,就会将多个列组合到一起再进行日期解析工作(例如,日期/时间分别位于两个列中)
keep_date_col如果连接多列解析日期,则保持参与连接的列。默认为False.
converters由列号/列名跟函数之间的映射关系组成的字典。例如,{‘foo’:f}会对foo列的所有值应用函数f
dayfirst当解析有歧义的日期时,将其看做国际格式(例如,6/6/2019为June,6,2019)。默认为False
date_parser用于解析日期的函数
nrows需要读取的行数(从文件开始处算起)
iterator返回一个TextParser以便逐块读取文件
chunksize文件块的大小(用于迭代)
skip_footer需要忽略的行数(从文件末尾处算起)
verbose打印各种解析器输出信息,比如“非数值列中确实值得数量”等
encoding用于Unicode的文本编码格式。例如“utf-8”表示用UTF-8编码的文本
squeeze如果数据经解析后仅含一列,则返回Series
thousands千分位分隔符,如“,”或“.”

用例:

import numpy as np
from pandas import Series, DataFrame
import pandas as pd

# 读取文本格式数据
df = pd.read_csv('ex1.csv的路径')
print("1 read_csv的使用\n\rdf=\n\r", df)

print("\n\r2 sep拆分字符序列\n\rex1=\n\r", pd.read_table('ex1.csv的路径', sep=','))
print("\n\r3 header列名行号,None不使用\n\rex2=\n\r", pd.read_csv('ex2.csv的路径', header=None))
print("\n\r4 names列名\n\rex2=\n\r", pd.read_csv('ex2.csv的路径', names=['a', 'b', 'c', 'd', 'message']))

names = ['a', 'b', 'c', 'd', 'message']
print("\n\r5 指定index_col行索引的列编号\n\rex2=\n\r", pd.read_csv('ex2.csv的路径', names=names, index_col='message'))

parsed = pd.read_csv('csv_mindex.csv的路径', index_col=['key1', 'key2'])
print("\n\r同时取多个作为行索引\n\rex2=\n\r", parsed)

list(open('ex3.txt的路径'))
result = pd.read_table('ex3.txt的路径', sep='\s+')
print("\n\r6 打开成列表,读取列表read_table\n\rresult=\n\r", result)
print("\n\r7 skiprows忽略行\n\rex4=\n\r", pd.read_csv('ex4.csv的路径', skiprows=[0, 2, 3]))

result = pd.read_csv('ex5.csv的路径')
print("\n\rresult=\n\r", result)
print("\n\r8 判断\n\risnull(result)=\n\r", pd.isnull(result))

result = pd.read_csv('ex5.csv的路径', na_values=['NULL'])
print("\n\r9 na_values替换na的值\n\rex2=\n\r", result)

sentinels = {'message': ['foo', 'NA'], 'something': ['two']}
print("\n\r10 索引替换值为NaN\n\rex2=\n\r", pd.read_csv('ex5.csv的路径', na_values=sentinels))

结果:

1 read_csv的使用
df=
    a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo

2 sep拆分字符序列
ex1=
    a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo

3 header列名行号,None不使用
ex2=
    0   1   2   3      4
0  1   2   3   4  hello
1  5   6   7   8  world
2  9  10  11  12    foo

4 names列名
ex2=
    a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo

5 指定index_col行索引的列编号
ex2=
          a   b   c   d
message               
hello    1   2   3   4
world    5   6   7   8
foo      9  10  11  12

同时取多个作为行索引
ex2=
            value1  value2
key1 key2                
one  a          1       2
     b          3       4
     c          5       6
     d          7       8
two  a          9      10
     b         11      12
     c         13      14
     d         15      16

6 打开成列表,读取列表read_table
result=
             A         B         C
aaa -0.264438 -1.026059 -0.619500
bbb  0.927272  0.302904 -0.032399
ccc -0.264273 -0.386314 -0.217601
ddd -0.871858 -0.348382  1.100491

7 skiprows忽略行
ex4=
    a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo

result=
   something  a   b     c   d message
0       one  1   2   3.0   4     NaN
1       two  5   6   NaN   8   world
2     three  9  10  11.0  12     foo

8 判断
isnull(result)=
    something      a      b      c      d  message
0      False  False  False  False  False     True
1      False  False  False   True  False    False
2      False  False  False  False  False    False

9 na_values替换na的值
ex2=
   something  a   b     c   d message
0       one  1   2   3.0   4     NaN
1       two  5   6   NaN   8   world
2     three  9  10  11.0  12     foo

10 索引替换值为NaN
ex2=
   something  a   b     c   d message
0       one  1   2   3.0   4     NaN
1       NaN  5   6   NaN   8   world
2     three  9  10  11.0  12     NaN

3.3.2 逐块读取文本文件

  • 只读取几行-nrows
  • 逐块读取文件-chunksize
    用例:
from pandas import Series
import pandas as pd

#逐行读取文本文件
result = pd.read_csv('ex6.csv的路径')
print("\n\r1 read_csv的使用\n\rresult=\n\r", result)
print("\n\r2 指定读取行nrows\n\rresult=\n\r", pd.read_csv('ex6.csv的路径', nrows=5))
chunker = pd.read_csv('ex6.csv的路径', chunksize=1000)
print("\n\r3 chunksize逐块读取\n\rchunker=\n\r", chunker)

tot = Series([])
for piece in chunker:
    tot = tot.add(piece['key'].value_counts(), fill_value=0)

tot = tot.sort_values(ascending=False)
print("\n\r4 逐行索引读取\n\rresult=\n\r", tot)
print("\n\r选择输出\n\rresult=\n\r", tot[:10])

结果:

1 read_csv的使用
result=
            one       two     three      four key
0     0.467976 -0.038649 -0.295344 -1.824726   L
1    -0.358893  1.404453  0.704965 -0.200638   B
2    -0.501840  0.659254 -0.421691 -0.057688   G
3     0.204886  1.074134  1.388361 -0.982404   R
4     0.354628 -0.133116  0.283763 -0.837063   Q
...        ...       ...       ...       ...  ..
9995  2.311896 -0.417070 -1.409599 -0.515821   L
9996 -0.479893 -0.650419  0.745152 -0.646038   E
9997  0.523331  0.787112  0.486066  1.093156   K
9998 -0.362559  0.598894 -1.843201  0.887292   G
9999 -0.096376 -1.012999 -0.657431 -0.573315   0

[10000 rows x 5 columns]

2 指定读取行nrows
result=
         one       two     three      four key
0  0.467976 -0.038649 -0.295344 -1.824726   L
1 -0.358893  1.404453  0.704965 -0.200638   B
2 -0.501840  0.659254 -0.421691 -0.057688   G
3  0.204886  1.074134  1.388361 -0.982404   R
4  0.354628 -0.133116  0.283763 -0.837063   Q

3 chunksize逐块读取
chunker=
 <pandas.io.parsers.TextFileReader object at 0x000000000BAF7BC8>

4 逐行索引读取
result=
 E    368.0
X    364.0
L    346.0
O    343.0
Q    340.0
M    338.0
J    337.0
F    335.0
K    334.0
H    330.0
V    328.0
I    327.0
U    326.0
P    324.0
D    320.0
A    320.0
R    318.0
Y    314.0
G    308.0
S    308.0
N    306.0
W    305.0
T    304.0
B    302.0
Z    288.0
C    286.0
4    171.0
6    166.0
7    164.0
8    162.0
3    162.0
5    157.0
2    152.0
0    151.0
9    150.0
1    146.0
dtype: float64

选择输出
result=
 E    368.0
X    364.0
L    346.0
O    343.0
Q    340.0
M    338.0
J    337.0
F    335.0
K    334.0
H    330.0
dtype: float64

3.3.3 数据写出

DataFrame的to_csv方法
用例:

import numpy as np
from pandas import Series
import pandas as pd
import sys

#文件写出
data = pd.read_csv('ex5.csv的地址')
print("文件写出\n\rdata=\n\r", data)
data.to_csv('out.csv保存地址')
print("\n\r1 指定分隔符")
data.to_csv(sys.stdout, sep='|')
print("\n\r2 不替换分隔符")
data.to_csv(sys.stdout, na_rep='NULL')
print("\n\r3 不展示列名和行名")
data.to_csv(sys.stdout, index=False, header=False)
print("\n\r4 不使用行索引,使用列索引")
data.to_csv(sys.stdout, index=False, columns=['a', 'b', 'c'])

dates = pd.date_range('1/1/2000', periods=7)
ts = Series(np.arange(7), index=dates)
print("\n\rdates=\n\r", dates)
print("\n\rts=\n\r", ts)
ts.to_csv('tseries.csv保存地址')

# Series.from_csv('tseries.csv', parse_dates=True)
print("\n\r5 尝试将字符转化为日期")
print(pd.read_csv('tseries.csvd的地址', parse_dates=True))

结果:

文件写出
data=
   something  a   b     c   d message
0       one  1   2   3.0   4     NaN
1       two  5   6   NaN   8   world
2     three  9  10  11.0  12     foo

1 指定分隔符
|something|a|b|c|d|message
0|one|1|2|3.0|4|
1|two|5|6||8|world
2|three|9|10|11.0|12|foo

2 不替换分隔符
,something,a,b,c,d,message
0,one,1,2,3.0,4,NULL
1,two,5,6,NULL,8,world
2,three,9,10,11.0,12,foo

3 不展示列名和行名
one,1,2,3.0,4,
two,5,6,,8,world
three,9,10,11.0,12,foo

4 不使用行索引,使用列索引
a,b,c
1,2,3.0
5,6,
9,10,11.0

dates=
 DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04',
               '2000-01-05', '2000-01-06', '2000-01-07'],
              dtype='datetime64[ns]', freq='D')

ts=
 2000-01-01    0
2000-01-02    1
2000-01-03    2
2000-01-04    3
2000-01-05    4
2000-01-06    5
2000-01-07    6
Freq: D, dtype: int32

5 尝试将字符转化为日期
   2000-01-01  0
0  2000-01-02  1
1  2000-01-03  2
2  2000-01-04  3
3  2000-01-05  4
4  2000-01-06  5
5  2000-01-07  6

3.3.4 手工处理分隔符格式

参数说明
delimiter用于分隔字段的单字符字符串。默认为“,”
lineterminator用于写操作的行结束符,默认为“\n\r”。读操作将忽略此选项,它能认出跨平台的行结束符
quotechar用于带有特殊字符(如分隔符)的字段的引用符号。默认为“ " ”
quoting引用约定。可选值包括csv.QUOTE_ALL(引用所有字段)、csv.QUOTE_MINIMAL(引用带有诸如分隔符之类特殊字符的字段)、csv.QUOTE_NONNUMERIC以及csv.QUOTE_NON(不引用)。默认为QUOTE_MINIMAL
skipinitialspace忽略分隔符后面的空白符。默认为False
doublequote如何处理字段内的引用符号。如果未Ture,则双写。
escapechar用于对分隔符进行转义的字符串(如果quoting被设置为csv.QUOTE_NONE的话)。默认禁用

用例:

import pandas as pd
import csv

#手工处理分隔符格式
f = open('ex7.csv的地址')
reader = csv.reader(f)
print("\n\r直接读取\n\rreader=", reader)

print("\n\r逐行打印reader")
for line in reader:
    print("\n\r", line)

lines = list(csv.reader(open('ex7.csv的地址')))
print("\n\r数组方式打印\n\rlines=", lines)

header, values = lines[0], lines[1:]
print("\n\rheader=", header)
print("\n\rvalues=", values)
data_dict = {h: v for h, v in zip(header, zip(*values))}
print("\n\r字典\n\rdata_dict=", data_dict)

class my_dialect(csv.Dialect):
    lineterminator = '\n'
    delimiter = ';'
    quotechar = '"'
    quoting = csv.QUOTE_MINIMAL

with open('mydata.csv', 'w') as f:
    writer = csv.writer(f, dialect=my_dialect)
    writer.writerow(('one', 'two', 'three'))
    writer.writerow(('1', '2', '3'))
    writer.writerow(('4', '5', '6'))
    writer.writerow(('7', '8', '9'))
    
print("\n\r分隔效果\n\r", pd.read_table('mydata.csv', sep=';'))

结果:

直接读取
reader= <_csv.reader object at 0x000000000BAF1AC8>

逐行打印reader

 ['a', 'b', 'c']

 ['1', '2', '3']

 ['1', '2', '3', '4']

数组方式打印
lines= [['a', 'b', 'c'], ['1', '2', '3'], ['1', '2', '3', '4']]

header= ['a', 'b', 'c']

values= [['1', '2', '3'], ['1', '2', '3', '4']]

字典
data_dict= {'a': ('1', '1'), 'b': ('2', '2'), 'c': ('3', '3')}
<_io.TextIOWrapper name='mydata.csv' mode='w' encoding='cp936'>

分隔效果
    one  two  three
0    1    2      3
1    4    5      6
2    7    8      9

3.4 读取Excel文件

  • 处理Excel的基本库:xlrd(读取)、xlwt(写入)
  • 基本电子表格交互:生成工作簿、从工作簿中读取数据、使用OpenPyxl、使用pandas读写
    用例:
import numpy as np
import pandas as pd
import xlrd, xlwt

#生成xls工作薄
path = '前缀地址'

wb = xlwt.Workbook()
wb.add_sheet('first_sheet', cell_overwrite_ok=True)
print("\n\r1 获取工作簿\n\rwb=", wb.get_active_sheet())

ws_1 = wb.get_sheet(0)
print("\n\r2 由指定索引获取工作簿\n\rws_1=", ws_1)

ws_2 = wb.add_sheet('second_sheet')
print("\n\r3 由专有词获取工作簿\n\rws_2=", ws_2)

data = np.arange(1, 65).reshape((8, 8))
print("\n\rdata=\n\r", data)

ws_1.write(0, 0, 100)

for c in range(data.shape[0]):
    # print(c)
    for r in range(data.shape[1]):
        # print(r)
        # print(data[c, r])
        ws_1.write(r, c, str(data[c, r]))
        ws_2.write(r, c, str(data[r, c]))

wb.save(path + 'workbook.xls')

# 生成xlsx工作薄(2010以后)

# 从工作薄中读取
book = xlrd.open_workbook(path + 'workbook.xls')
print("\n\r从工作薄中读取\n\r1 open_workbook打开工作簿\n\rbook=", book)
print("\n\r2 工作簿名称\n\rsheet_names=", book.sheet_names())

sheet_1 = book.sheet_by_name('first_sheet')
sheet_2 = book.sheet_by_index(1)
print("\n\rsheet_1=", sheet_1)
print("\n\rsheet_2.name=", sheet_2.name)
print("\n\r3 工作簿列数\n\rsheet_1.ncols=", sheet_1.ncols)
print("\n\r4 工作簿行数\n\rsheet_1.nrows=", sheet_1.nrows)

cl = sheet_1.cell(0, 0)
print("\n\r5 指定索引工作簿值\n\rcl.value=", cl.value)
print("\n\r6 数据类型\n\rcl.ctype=", cl.ctype)

print("\n\r7 索引取值\n\rsheet_2.row(3)=", sheet_2.row(3))
print("\n\rsheet_2.col(3)=", sheet_2.col(3))
print("\n\rsheet_1.col_values(3, start_rowx=3, end_rowx=7)=", sheet_1.col_values(3, start_rowx=3, end_rowx=7))
print("\n\rsheet_1.row_values(3, start_colx=3, end_colx=7)=", sheet_1.row_values(3, start_colx=3, end_colx=7))

#使用pandas读取
xls_file=pd.ExcelFile(path + 'workbook.xls')
table=xls_file.parse('first_sheet')
print("\n\r使用pandas读取\n\rExcelFile打开excl\n\rxls_file=", xls_file)
print("\n\rxls解析获取table\n\rtable=\n\r", table)

结果:

1 获取工作簿
wb= 0

2 由指定索引获取工作簿
ws_1= <xlwt.Worksheet.Worksheet object at 0x000000000BC9AC48>

3 由专有词获取工作簿
ws_2= <xlwt.Worksheet.Worksheet object at 0x000000000BC9ACC8>

data=
 [[ 1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16]
 [17 18 19 20 21 22 23 24]
 [25 26 27 28 29 30 31 32]
 [33 34 35 36 37 38 39 40]
 [41 42 43 44 45 46 47 48]
 [49 50 51 52 53 54 55 56]
 [57 58 59 60 61 62 63 64]]

从工作薄中读取
1 open_workbook打开工作簿
book= <xlrd.book.Book object at 0x000000000BCA3388>

2 工作簿名称
sheet_names= ['first_sheet', 'second_sheet']

sheet_1= <xlrd.sheet.Sheet object at 0x000000000BCD1A48>

sheet_2.name= second_sheet

3 工作簿列数
sheet_1.ncols= 8

4 工作簿行数
sheet_1.nrows= 8

5 指定索引工作簿值
cl.value= 1

6 数据类型
cl.ctype= 1

7 索引取值
sheet_2.row(3)= [text:'25', text:'26', text:'27', text:'28', text:'29', text:'30', text:'31', text:'32']

sheet_2.col(3)= [text:'4', text:'12', text:'20', text:'28', text:'36', text:'44', text:'52', text:'60']

sheet_1.col_values(3, start_rowx=3, end_rowx=7)= ['28', '29', '30', '31']

sheet_1.row_values(3, start_colx=3, end_colx=7)= ['28', '36', '44', '52']

使用pandas读取
ExcelFile打开excl
xls_file= <pandas.io.excel._base.ExcelFile object at 0x000000000BCD30C8>

xls解析获取table
table=
    1   9  17  25  33  41  49  57
0  2  10  18  26  34  42  50  58
1  3  11  19  27  35  43  51  59
2  4  12  20  28  36  44  52  60
3  5  13  21  29  37  45  53  61
4  6  14  22  30  38  46  54  62
5  7  15  23  31  39  47  55  63
6  8  16  24  32  40  48  56  64

在这里插入图片描述

3.5 数据类型和访问的相关处理

涉及数据类型:JOSON、二进制数据格式、HDF5。
访问形式:web、sql
JOSON(JavaScript Object Notation),是通过HTTP请求在Web浏览器和其他应用程序直接发送数据的标准格式之一。
用例:

from pandas import DataFrame
import pandas as pd
import json

# JSON数据
obj = """
{"name": "Wes",
 "places_lived": ["United States", "Spain", "Germany"],
 "pet": null,
 "siblings": [{"name": "Scott", "age": 25, "pet": "Zuko"},
              {"name": "Katie", "age": 33, "pet": "Cisco"}]
}
"""

result = json.loads(obj)
print("-------------------------------------------------------------------")
print("\n\rJSON数据\n\r1 loads字符串转换字典\n\rresult=", result)
print("\n\rtype(result)=", type(result))

asjson = json.dumps(result)
print("\n\r2 dumps字典转换字符串\n\rasjson=", asjson)
print("\n\rtype(asjson)=", type(asjson))

siblings = DataFrame(result['siblings'], columns=['name', 'age'])
print("\n\r3 取数据输出dataframe\n\rsiblings=\n\r", siblings)
print("\n\rtype(siblings)=", type(siblings))


# 二进制数据格式
# pickle
frame = pd.read_csv('C:/Users/60055144/Desktop/data/ex1.csv')
print("-------------------------------------------------------------------")
print("\n\r二进制数据格式\n\rframe=\n\r", frame)
frame.to_pickle('C:/Users/60055144/Desktop/frame_pickle')

print("\n\r1 read_pickle\n\rwb=", pd.read_pickle('C:/Users/60055144/Desktop/frame_pickle'))

# HDF5格式
# store = pd.HDFStore('mydata.h5')
# store['obj1'] = frame
# store['obj1_col'] = frame['a']
# print("\n\rHDF5格式\n\rHDFStore\n\rstore=", store)
# print("\n\rstore['obj1']=", store['obj1'])
#
# store.close()
# pd.os.remove('mydata.h5')

# 使用HTML和Web API
import requests
url = 'https://api.github.com/repos/pydata/pandas/milestones/28/labels'
resp = requests.get(url)
print("-------------------------------------------------------------------")
print("\n\r使用HTML和Web API\n\rresp=", resp)

data=json.loads(resp.text)
print("\n\rdata=", data)

issue_labels = DataFrame(data)
print("\n\rissue_labels=\n\r", issue_labels)


# 使用数据库
import sqlite3

query = """
CREATE TABLE test
(a VARCHAR(20), b VARCHAR(20),
 c REAL,        d INTEGER
);"""

con = sqlite3.connect(':memory:')
con.execute(query)
con.commit()

data = [('Atlanta', 'Georgia', 1.25, 6),
        ('Tallahassee', 'Florida', 2.6, 3),
        ('Sacramento', 'California', 1.7, 5)]
stmt = "INSERT INTO test VALUES(?, ?, ?, ?)"

con.executemany(stmt, data)
con.commit()

cursor = con.execute('select * from test')
rows = cursor.fetchall()
print("-------------------------------------------------------------------")
print("\n\r使用数据库\n\rrows=", rows)

cursor.description

DataFrame(rows, columns=list(zip(*cursor.description))[0])

import pandas.io.sql as sql
print("\n\rcon=\n\r", sql.read_sql('select * from test', con))

结果:

JSON数据
1 loads字符串转换字典
result= {'name': 'Wes', 'places_lived': ['United States', 'Spain', 'Germany'], 'pet': None, 'siblings': [{'name': 'Scott', 'age': 25, 'pet': 'Zuko'}, {'name': 'Katie', 'age': 33, 'pet': 'Cisco'}]}

type(result)= <class 'dict'>

2 dumps字典转换字符串
asjson= {"name": "Wes", "places_lived": ["United States", "Spain", "Germany"], "pet": null, "siblings": [{"name": "Scott", "age": 25, "pet": "Zuko"}, {"name": "Katie", "age": 33, "pet": "Cisco"}]}

type(asjson)= <class 'str'>

3 取数据输出dataframe
siblings=
     name  age
0  Scott   25
1  Katie   33

type(siblings)= <class 'pandas.core.frame.DataFrame'>

二进制数据格式
frame=
    a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo

1 read_pickle
wb=    a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo
-------------------------------------------------------------------

使用HTML和Web API
resp= <Response [200]>

data= [{'id': 76811, 'node_id': 'MDU6TGFiZWw3NjgxMQ==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Bug', 'name': 'Bug', 'color': 'e10c02', 'default': False}, {'id': 76812, 'node_id': 'MDU6TGFiZWw3NjgxMg==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Enhancement', 'name': 'Enhancement', 'color': '4E9A06', 'default': False}, {'id': 127681, 'node_id': 'MDU6TGFiZWwxMjc2ODE=', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Refactor', 'name': 'Refactor', 'color': 'FCE94F', 'default': False}, {'id': 129350, 'node_id': 'MDU6TGFiZWwxMjkzNTA=', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Build', 'name': 'Build', 'color': '75507B', 'default': False}, {'id': 134699, 'node_id': 'MDU6TGFiZWwxMzQ2OTk=', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Docs', 'name': 'Docs', 'color': '3465A4', 'default': False}, {'id': 211840, 'node_id': 'MDU6TGFiZWwyMTE4NDA=', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Timeseries', 'name': 'Timeseries', 'color': 'AFEEEE', 'default': False}, {'id': 233160, 'node_id': 'MDU6TGFiZWwyMzMxNjA=', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Groupby', 'name': 'Groupby', 'color': '729FCF', 'default': False}, {'id': 2301354, 'node_id': 'MDU6TGFiZWwyMzAxMzU0', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Data%20IO', 'name': 'Data IO', 'color': '06909A', 'default': False}, {'id': 2413328, 'node_id': 'MDU6TGFiZWwyNDEzMzI4', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Visualization', 'name': 'Visualization', 'color': '8AE234', 'default': False}, {'id': 2822098, 'node_id': 'MDU6TGFiZWwyODIyMDk4', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Indexing', 'name': 'Indexing', 'color': '0b02e1', 'default': False}, {'id': 2822342, 'node_id': 'MDU6TGFiZWwyODIyMzQy', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Missing-data', 'name': 'Missing-data', 'color': 'd7e102', 'default': False}, {'id': 8935311, 'node_id': 'MDU6TGFiZWw4OTM1MzEx', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Performance', 'name': 'Performance', 'color': 'a10c02', 'default': False}, {'id': 13098779, 'node_id': 'MDU6TGFiZWwxMzA5ODc3OQ==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Reshaping', 'name': 'Reshaping', 'color': '02d7e1', 'default': False}, {'id': 31404521, 'node_id': 'MDU6TGFiZWwzMTQwNDUyMQ==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Dtypes', 'name': 'Dtypes', 'color': 'e102d8', 'default': False}, {'id': 32933285, 'node_id': 'MDU6TGFiZWwzMjkzMzI4NQ==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Admin', 'name': 'Admin', 'color': 'DDDDDD', 'default': False}, {'id': 35818298, 'node_id': 'MDU6TGFiZWwzNTgxODI5OA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/API%20Design', 'name': 'API Design', 'color': 'AD7FA8', 'default': False}, {'id': 42670965, 'node_id': 'MDU6TGFiZWw0MjY3MDk2NQ==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Error%20Reporting', 'name': 'Error Reporting', 'color': 'ffa0ff', 'default': False}, {'id': 47223669, 'node_id': 'MDU6TGFiZWw0NzIyMzY2OQ==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Numeric', 'name': 'Numeric', 'color': '006b75', 'default': False}, {'id': 47229171, 'node_id': 'MDU6TGFiZWw0NzIyOTE3MQ==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/IO%20CSV', 'name': 'IO CSV', 'color': '5319e7', 'default': False}, {'id': 47232590, 'node_id': 'MDU6TGFiZWw0NzIzMjU5MA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/IO%20SQL', 'name': 'IO SQL', 'color': '5319e7', 'default': False}, {'id': 48070600, 'node_id': 'MDU6TGFiZWw0ODA3MDYwMA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/CI', 'name': 'CI', 'color': 'a2bca7', 'default': False}, {'id': 49094459, 'node_id': 'MDU6TGFiZWw0OTA5NDQ1OQ==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Internals', 'name': 'Internals', 'color': 'fbca04', 'default': False}, {'id': 49597148, 'node_id': 'MDU6TGFiZWw0OTU5NzE0OA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Timedelta', 'name': 'Timedelta', 'color': '5319e7', 'default': False}, {'id': 53181044, 'node_id': 'MDU6TGFiZWw1MzE4MTA0NA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Frequency', 'name': 'Frequency', 'color': '0052cc', 'default': False}, {'id': 57186974, 'node_id': 'MDU6TGFiZWw1NzE4Njk3NA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Windows', 'name': 'Windows', 'color': 'fbca04', 'default': False}, {'id': 57296398, 'node_id': 'MDU6TGFiZWw1NzI5NjM5OA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Algos', 'name': 'Algos', 'color': 'eb6420', 'default': False}, {'id': 60458168, 'node_id': 'MDU6TGFiZWw2MDQ1ODE2OA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Timezones', 'name': 'Timezones', 'color': '5319e7', 'default': False}, {'id': 60635328, 'node_id': 'MDU6TGFiZWw2MDYzNTMyOA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Period', 'name': 'Period', 'color': 'eb6420', 'default': False}, {'id': 71268330, 'node_id': 'MDU6TGFiZWw3MTI2ODMzMA==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/MultiIndex', 'name': 'MultiIndex', 'color': '207de5', 'default': False}, {'id': 78527356, 'node_id': 'MDU6TGFiZWw3ODUyNzM1Ng==', 'url': 'https://api.github.com/repos/pandas-dev/pandas/labels/Categorical', 'name': 'Categorical', 'color': 'e11d21', 'default': False}]

issue_labels=
           id                   node_id  ...   color default
0      76811      MDU6TGFiZWw3NjgxMQ==  ...  e10c02   False
1      76812      MDU6TGFiZWw3NjgxMg==  ...  4E9A06   False
2     127681      MDU6TGFiZWwxMjc2ODE=  ...  FCE94F   False
3     129350      MDU6TGFiZWwxMjkzNTA=  ...  75507B   False
4     134699      MDU6TGFiZWwxMzQ2OTk=  ...  3465A4   False
5     211840      MDU6TGFiZWwyMTE4NDA=  ...  AFEEEE   False
6     233160      MDU6TGFiZWwyMzMxNjA=  ...  729FCF   False
7    2301354      MDU6TGFiZWwyMzAxMzU0  ...  06909A   False
8    2413328      MDU6TGFiZWwyNDEzMzI4  ...  8AE234   False
9    2822098      MDU6TGFiZWwyODIyMDk4  ...  0b02e1   False
10   2822342      MDU6TGFiZWwyODIyMzQy  ...  d7e102   False
11   8935311      MDU6TGFiZWw4OTM1MzEx  ...  a10c02   False
12  13098779  MDU6TGFiZWwxMzA5ODc3OQ==  ...  02d7e1   False
13  31404521  MDU6TGFiZWwzMTQwNDUyMQ==  ...  e102d8   False
14  32933285  MDU6TGFiZWwzMjkzMzI4NQ==  ...  DDDDDD   False
15  35818298  MDU6TGFiZWwzNTgxODI5OA==  ...  AD7FA8   False
16  42670965  MDU6TGFiZWw0MjY3MDk2NQ==  ...  ffa0ff   False
17  47223669  MDU6TGFiZWw0NzIyMzY2OQ==  ...  006b75   False
18  47229171  MDU6TGFiZWw0NzIyOTE3MQ==  ...  5319e7   False
19  47232590  MDU6TGFiZWw0NzIzMjU5MA==  ...  5319e7   False
20  48070600  MDU6TGFiZWw0ODA3MDYwMA==  ...  a2bca7   False
21  49094459  MDU6TGFiZWw0OTA5NDQ1OQ==  ...  fbca04   False
22  49597148  MDU6TGFiZWw0OTU5NzE0OA==  ...  5319e7   False
23  53181044  MDU6TGFiZWw1MzE4MTA0NA==  ...  0052cc   False
24  57186974  MDU6TGFiZWw1NzE4Njk3NA==  ...  fbca04   False
25  57296398  MDU6TGFiZWw1NzI5NjM5OA==  ...  eb6420   False
26  60458168  MDU6TGFiZWw2MDQ1ODE2OA==  ...  5319e7   False
27  60635328  MDU6TGFiZWw2MDYzNTMyOA==  ...  eb6420   False
28  71268330  MDU6TGFiZWw3MTI2ODMzMA==  ...  207de5   False
29  78527356  MDU6TGFiZWw3ODUyNzM1Ng==  ...  e11d21   False

[30 rows x 6 columns]
-------------------------------------------------------------------

使用数据库
rows= [('Atlanta', 'Georgia', 1.25, 6), ('Tallahassee', 'Florida', 2.6, 3), ('Sacramento', 'California', 1.7, 5)]

con=
              a           b     c  d
0      Atlanta     Georgia  1.25  6
1  Tallahassee     Florida  2.60  3
2   Sacramento  California  1.70  5

参考

以上为个人整理总结的知识,如有遗漏或错误欢迎留言指出、点评,如要引用,请联系通知,未经允许谢绝转载。
[1]: https://baijiahao.baidu.com/s?id=1606423705612438940&wfr=spider&for=pc
[2]:https://baike.baidu.com/item/pandas/17209606?fr=aladdin

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值