Pandas基础(Series & DataFrame)

一、Series & DataFrame是什么?

答:

  1. Series是表格中的一个列,可以保存任何数据类型
  2. Series = index + data + name(Series=索引+数据+名字)
  3. DataFrame是多个Series拼接,这些Series共用索引

图形化描述如下图:

在这里插入图片描述

二、用程序创建Series

创建Series的API:

pandas.Series( data, index, dtype, name, copy)

  • data:数据(ndarray)
  • index:数据索引。(默认是从0开始的整数序列)
  • dtype:数据类型
  • name:名称
  • copy:拷贝数据(默认False)

2.1 创建一个Series,只给data

import pandas as pd

# 创建一个Series,只给data
a=['asd','bbb','ccc']
s=pd.Series(a)     
print(s)

运行结果:

0    asd
1    bbb
2    ccc
dtype: object

2.2 创建一个Series,给data和index

import pandas as pd

# 创建一个Series,给data和index
a=['asd','bbb','ccc']
ind=['x','y','z']
s=pd.Series(a,ind)
print(s)
print('s[\'y\'] = ',s['y'])  # 通过index访问data

运行结果

x    asd
y    bbb
z    ccc
dtype: object
s['y'] =  bbb

2.3 用字典创建一个Series

import pandas as pd

# 用字典创建一个Series
a={1:'asd',2:'bbb',3:'ccc'}
s=pd.Series(a,name="Series-Test")     #加了name(列名)
print(s)

运行结果

1    asd
2    bbb
3    ccc
Name: Series-Test, dtype: object

2.4 用字典+index 创建一个Series【1】

用字典和index创建一个Series,结果符合我们的常识,但该程序重点在于引出2.5所示情况

import pandas as pd
d = {'a': 1, 'b': 2, 'c': 3}
ser = pd.Series(data=d, index=['a', 'b', 'c'])
print(ser)

运行结果

a    1
b    2
c    3
dtype: int64

2.5 用字典+index 创建一个Series【2】

index首先是用字典中的键构建的。之后,该Series与给定的index重新索引,因此得到结果NaN。

import pandas as pd
d = {'a': 1, 'b': 2, 'c': 3}
ser = pd.Series(data=d, index=['x', 'y', 'c'])
print(ser)

运行结果

x    NaN
y    NaN
c    3.0
dtype: float64

2.6 copy字段的使用【1】

先行知识:numpy 副本与视图(copy & view)
由于输入数据类型是python中的list,即使copy=False, Series也有原始数据的副本,因此数据没有改变。【应该用numpy中的数据类型,该字段才生效】

import pandas as pd
r = [1, 2]
ser = pd.Series(r, copy=False)
ser.iloc[0] = 999
print(r)    # 原始数据没变
print(ser)  # Series变了

运行结果

[1, 2]
0    999
1      2
dtype: int64

2.6 copy字段的使用【2】

由于输入数据类型是numpy中的numpy.array,同时copy=False,
故Series有原始数据的视图,
因此修改Series时,原始数据会改变。

import pandas as pd
import numpy as np
r = np.array([1, 2])
ser = pd.Series(r, copy=False)
ser.iloc[0] = 999
print(r)    # 原始数据变了
print(ser)  # Series变了

运行结果

[999   2]
0    999
1      2
dtype: int32

三、用程序创建DataFrame

pandas.DataFrame(data, index, columns, dtype, copy)

  • data: 一组数据(可以是ndarray, series, map, lists, dict)
  • index: 索引(行标签)
  • columns: 列标签(列名)
  • dtype: 数据类型
  • copy:数据是否是原始数据的副本,默认为False

3.1 用字典构造DataFrame。

import pandas as pd
d = {
    'col1': [1, 2],  # 列名:该列的数据
    'col2': [3, 4]
    }
df = pd.DataFrame(data=d,index=['a','b']) # 指定索引为a,b
print(df)
print()
print(df.dtypes) # 查看数据类型

运行结果

   col1  col2
a     1     3
b     2     4

col1    int64
col2    int64
dtype: object

3.2 用字典构造DataFrame,并指定数据类型。

import pandas as pd
import numpy as np
d = {
    'col1': [1, 2],  # 列名:该列的数据
    'col2': [3, 4]
    }
df = pd.DataFrame(data=d,index=['a','b'],dtype=np.int8) # 指定索引为a,b。指定数据类型为8位int
print(df)
print()
print(df.dtypes) # 查看数据类型

运行结果

col1  col2
a     1     3
b     2     4

col1    int8
col2    int8
dtype: object

3.3 从包含Series的字典中构造DataFrame

import pandas as pd
d={
    'col1':[1,2,3,4],     # 第一列数据 
    'col2':pd.Series([2,3],index=[2,3]) # 第二列数据
}
df=pd.DataFrame(data=d,index=[0,1,2,3])
print(df)

运行结果

   col1  col2
0     1   NaN
1     2   NaN
2     3   2.0
3     4   3.0

3.4 从numpy narray构造DataFrame

import pandas as pd
import numpy as np

a=np.array([[1,2,3],
            [4,5,6],
            [7,8,9]])  # 原封不动地摆放
df=pd.DataFrame(a,columns=['x','y','z']) # 指定了列名
print(df)

运行结果

   x  y  z
0  1  2  3
1  4  5  6
2  7  8  9

3.5 从带有标签列的numpy ndarray中构造DataFrame

import pandas as pd
import numpy as np

a=np.array([(1,2,3),(4,5,6),(7,8,9)],                # 创建了一个NumPy数组。数组的元素是三个元组:(1,2,3), (4,5,6), (7,8,9)。
           dtype=[('a','i4'),('b','i4'),('c','i4')]) # 数组的每个元组实际上是一个记录,其中每个字段都有一个标签('a', 'b', 'c')和相应的数据类型('i4' 代表4字节整数)。
df=pd.DataFrame(a,columns=['c','a']) # 指定了列名
print(df)

运行结果

   c  a
0  3  1
1  6  4
2  9  7

3.6 从dataclass构造DataFrame

import pandas as pd
import numpy as np
from dataclasses import make_dataclass

Point = make_dataclass("Point", [("x", int), ("y", int)])
df=pd.DataFrame([Point(0, 0), Point(0, 3), Point(2, 3)])
print(df)

运行结果

   x  y
0  0  0
1  0  3
2  2  3

3.7 从Series/DataFrame构造DataFrame

df1 = pd.DataFrame([1, 2, 3], index=["a", "b", "c"], columns=["x"])
df2 = pd.DataFrame(data=df1, index=["a", "c"])
print(df1)
print(df2)

运行结果

   x
a  1
b  2
c  3
   x
a  1
c  3

参考

pandas.Series官方文档

pandas.DataFrame官方文档

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值