美文网首页我爱编程
pandas入门 02 数据结构

pandas入门 02 数据结构

作者: happy_19 | 来源:发表于2018-04-23 18:50 被阅读33次
import numpy as np
import pandas as pd

0 pandas数据结构简介

pandas主要处理下面三种数据结构

  • Series
  • DataFrame
  • Panel

它们都是以numpy为基础的,处理速度相对较快,其中最常用的是DataFrame

数据结构 维数 简述
Series 1 1维数组,大小不可变,但是里边的值可变
DataFrame 2 2维数组,大小可变
Panel 3 3维数组,大小可变

接下来详细介绍这三种数据结构

1 Series

Series是一个可以保存任何类型的数据的一维标签数组,标签被称之为index

1.1 构造函数

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

构造函数参数如下:

参数 描述
data 数据,例如ndarray、list等
index 索引值必须保证唯一并可散列,与数据长度相同。默认使用np.arange(n)
dtype 数据类型
copy 复制数据,默认为False

1.2 创建Series

1.2.1 创建空Series

s = pd.Series()
print s
Series([], dtype: float64)

1.2.2 从list创建Series

使用默认的index使用默认index,如下所示

s = pd.Series([1, 3, 5, np.nan, 6, 8])
print s
0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

1.2.3 从np.ndarray中创建Series

给定一个相同长度的index,如下所示

s = pd.Series(np.random.rand(5), index=["a", "b", "c", "d", "e"])
print s
a    0.055684
b    0.697289
c    0.768223
d    0.428101
e    0.748015
dtype: float64
print s.index
Index([u'a', u'b', u'c', u'd', u'e'], dtype='object')

1.2.4 从dict创建Series

如果没有指定index,则按照字典顺序获取dict中的健作为index。如果指定了index,则按照指定的index从dict中获取索引对应的值。

d = {"a": 0., "b": 1., "c": 2.}
s = pd.Series(d)
print s

s = pd.Series(d, index=["b", "c", "d", "a"])
print s
a    0.0
b    1.0
c    2.0
dtype: float64
b    1.0
c    2.0
d    NaN
a    0.0
dtype: float64

1.2.5 从标量中创建Series

使用这种方式必须指定index,如下所示:

s = pd.Series(5., index=["a", "b", "c", "d", "e"])
print s
a    5.0
b    5.0
c    5.0
d    5.0
e    5.0
dtype: float64

1.3 类ndarray访问Series

Seriesnp.ndarray非常相似,可以使用大部分NumPy中的大部分方法或者方式来操作和访问Series,如下所示:

s = pd.Series(np.random.rand(5), index=["a", "b", "c", "d", "e"])

print s
a    0.566958
b    0.548278
c    0.239546
d    0.218399
e    0.322169
dtype: float64
print s[0]
0.566958376402
print s[:3]
a    0.566958
b    0.548278
c    0.239546
dtype: float64
print s[s>s.median()]
a    0.566958
b    0.548278
dtype: float64
print s[[4, 3, 1]]
e    0.322169
d    0.218399
b    0.548278
dtype: float64
print np.exp(s)
a    1.762897
b    1.730271
c    1.270672
d    1.244083
e    1.380118
dtype: float64
print s + s
a    1.133917
b    1.096556
c    0.479092
d    0.436798
e    0.644338
dtype: float64
print s * 2
a    1.133917
b    1.096556
c    0.479092
d    0.436798
e    0.644338
dtype: float64

1.4 类dict访问Series

可以通过类似dict的方式访问Series,如下所示

print s["a"]
0.566958376402
print "e" in s
True
print "f" in s
False
print s.get("e")
print s.get("f", np.nan)
0.322169102265
nan

2 DataFrame

DataFrame是一个二维数组结构,通过行index和列columns来访问其中的数据。

2.1 构造函数

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

构造函数参数如下:

参数 描述
data 数据,例如2-D ndarray、lists、Series、dict或者其他DataFrame等
index 对应于行标签不一定唯一,与数据长度相同。默认使用np.arange(n)
columns 对应于列标签必须保证唯一并可散列。默认使用np.arange(n)
dtype 数据类型
copy 复制数据,默认为False

2.2 创建DataFrame

2.2.1 从value是Series或者dicts的字典创建

DataFrame的index是所有Series中的indexes的并集。如果value是一个dict,首先将其转换成Series。如果没有指定columns,则使用dict中的所有keys作为columns。如下所示:

d = {"one": pd.Series([1., 2., 3.], index=["a", "b", "c"]),
    "two": pd.Series([1., 2., 3., 4.], index=["a", "b", "c", "d"])}

df = pd.DataFrame(d)
print df
   one  two
a  1.0  1.0
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0
df1 = pd.DataFrame(d, index=["d", "b", "a"])
print df1
   one  two
d  NaN  4.0
b  2.0  2.0
a  1.0  1.0
df2 = pd.DataFrame(d, index=["d", "b", "a"], columns=["two", "three"])
print df2
   two three
d  4.0   NaN
b  2.0   NaN
a  1.0   NaN

2.2.2 从value是ndarrays或者list的字典中创建

d = {"one": [1., 2., 3., 4.],
    "two": [4., 3., 2., 1.]}

df = pd.DataFrame(d)
print df
   one  two
0  1.0  4.0
1  2.0  3.0
2  3.0  2.0
3  4.0  1.0
df1 = pd.DataFrame(d, index=["a", "b", "c", "d"])
print df1
   one  two
a  1.0  4.0
b  2.0  3.0
c  3.0  2.0
d  4.0  1.0

2.2.3 从结构化的array中创建

data = np.zeros((2,), dtype=[("A", "i4"), ("B", "f4"), ("C", "a10")])
data[:] = [(1, 2., "Hello"), (2, 3., "World")]

df1 = pd.DataFrame(data)
print df1
   A    B      C
0  1  2.0  Hello
1  2  3.0  World
df2 = pd.DataFrame(data, index=["first", "second"])
print df2
        A    B      C
first   1  2.0  Hello
second  2  3.0  World
df3 = pd.DataFrame(data, columns=["C", "A", "B"])
print df3
       C  A    B
0  Hello  1  2.0
1  World  2  3.0

2.2.4 从元素是dict的list中创建

data = [{"a": 1, "b": 2}, {"a": 5, "b": 10, "c": 20}]

df1 = pd.DataFrame(data)
print df1
   a   b     c
0  1   2   NaN
1  5  10  20.0
df2 = pd.DataFrame(data, columns=["a", "b"])
print df2
   a   b
0  1   2
1  5  10

2.2.5 从列表中创建

data = [1,2,3,4,5]

df = pd.DataFrame(data)
print df
   0
0  1
1  2
2  3
3  4
4  5
data = [['Alex',10],['Bob',12],['Clarke',13]]

df = pd.DataFrame(data,columns=['Name','Age'])
print df
     Name  Age
0    Alex   10
1     Bob   12
2  Clarke   13

2.3 列选择,添加和删除

通过column获取指定列

d = {"one": pd.Series([1., 2., 3.], index=["a", "b", "c"]),
    "two": pd.Series([1., 2., 3., 4.], index=["a", "b", "c", "d"])}

df = pd.DataFrame(d)

print df["one"]
a    1.0
b    2.0
c    3.0
d    NaN
Name: one, dtype: float64

添加列

df["three"] = df["one"] * df["two"]  #由其他列计算而来
df["flag"] = df["one"] > 2           #有其他列计算而来
df["foo"] = "bar"                    #全部赋值为bar
df.insert(1, "bar", df["one"])       #在固定位置添加列
print df
   one  bar  two  three   flag  foo
a  1.0  1.0  1.0    1.0  False  bar
b  2.0  2.0  2.0    4.0  False  bar
c  3.0  3.0  3.0    9.0   True  bar
d  NaN  NaN  4.0    NaN  False  bar

删除列

del df["two"]

three = df.pop("three")

print df
   one  bar   flag  foo
a  1.0  1.0  False  bar
b  2.0  2.0  False  bar
c  3.0  3.0   True  bar
d  NaN  NaN  False  bar

2.4 行选择,添加和删除

可以通过如下方式选择df中的某一行或者多行:

方式 操作 结果
df.loc[label] 通过行标签选择 Series
df.iloc[loc] 通过整数索引选择 Series
df[5:10] 通过下标选取多行 DataFrame
df[bool_vec] 通过boolean数组选取多行 DataFrame
df = pd.DataFrame(np.random.randn(10, 4), index=list("abcdefghij"), columns=["A", "B", "C", "D"])
print df
          A         B         C         D
a -0.986619  1.526696 -0.268968 -0.092091
b -1.151455 -0.512284 -0.978782  1.043218
c  0.909876 -1.032838 -0.103740 -0.002227
d -1.012738  0.519562  1.472160 -0.334393
e -0.833450  0.402912 -0.586269 -1.501751
f  0.039272  0.759840 -0.688571 -0.686812
g  0.641397  0.162648 -0.969303  1.060234
h -0.119458  0.059383 -1.328667 -0.777637
i  0.093021 -0.235605  0.166218 -0.582874
j  0.462327 -0.435135 -1.953918  0.531841

行选择

print df.loc["b"]
A   -1.151455
B   -0.512284
C   -0.978782
D    1.043218
Name: b, dtype: float64
print df.iloc[2]
A    0.909876
B   -1.032838
C   -0.103740
D   -0.002227
Name: c, dtype: float64
print df[2:4]
          A         B        C         D
c  0.909876 -1.032838 -0.10374 -0.002227
d -1.012738  0.519562  1.47216 -0.334393
print df[[False, True, False, True, False, True, False, False, True, False]]
          A         B         C         D
b -1.151455 -0.512284 -0.978782  1.043218
d -1.012738  0.519562  1.472160 -0.334393
f  0.039272  0.759840 -0.688571 -0.686812
i  0.093021 -0.235605  0.166218 -0.582874

附加行

df2 = pd.DataFrame(np.random.randn(2, 4), index=["m", "n"], columns=["A", "B", "C", "D"])
df = df.append(df2)
print df
          A         B         C         D
a -0.986619  1.526696 -0.268968 -0.092091
b -1.151455 -0.512284 -0.978782  1.043218
c  0.909876 -1.032838 -0.103740 -0.002227
d -1.012738  0.519562  1.472160 -0.334393
e -0.833450  0.402912 -0.586269 -1.501751
f  0.039272  0.759840 -0.688571 -0.686812
g  0.641397  0.162648 -0.969303  1.060234
h -0.119458  0.059383 -1.328667 -0.777637
i  0.093021 -0.235605  0.166218 -0.582874
j  0.462327 -0.435135 -1.953918  0.531841
m  1.004950  0.522191 -0.071558 -0.615419
n -0.995826 -1.055260 -1.204035 -1.444035

删除行

df = df.drop("a")
print df
          A         B         C         D
b -1.151455 -0.512284 -0.978782  1.043218
c  0.909876 -1.032838 -0.103740 -0.002227
d -1.012738  0.519562  1.472160 -0.334393
e -0.833450  0.402912 -0.586269 -1.501751
f  0.039272  0.759840 -0.688571 -0.686812
g  0.641397  0.162648 -0.969303  1.060234
h -0.119458  0.059383 -1.328667 -0.777637
i  0.093021 -0.235605  0.166218 -0.582874
j  0.462327 -0.435135 -1.953918  0.531841
m  1.004950  0.522191 -0.071558 -0.615419
n -0.995826 -1.055260 -1.204035 -1.444035

2.5 转置

df_t = df.T
print df_t
          b         c         d         e         f         g         h  \
A -1.151455  0.909876 -1.012738 -0.833450  0.039272  0.641397 -0.119458   
B -0.512284 -1.032838  0.519562  0.402912  0.759840  0.162648  0.059383   
C -0.978782 -0.103740  1.472160 -0.586269 -0.688571 -0.969303 -1.328667   
D  1.043218 -0.002227 -0.334393 -1.501751 -0.686812  1.060234 -0.777637   

          i         j         m         n  
A  0.093021  0.462327  1.004950 -0.995826  
B -0.235605 -0.435135  0.522191 -1.055260  
C  0.166218 -1.953918 -0.071558 -1.204035  
D -0.582874  0.531841 -0.615419 -1.444035  

3 Panel

用的不多,暂不介绍,待后续补充

相关文章

  • pandas

    pandas 入门 pandas 的数据结构介绍 pandas 有两个重要的数据结构:Series和DataFra...

  • pandas入门

    pandas入门 简介 pandas包含的数据结构和操作工具能快速简单地清洗和分析数据。 pandas经常与Num...

  • Python编程&数据科学入门 Lesson5

    第五课 - Pandas 入门 本课内容: *01. pandas DataFrame(数据框) *02. pan...

  • 第二章:Pandas入门-1

    第二章:pandas入门 2.1 pandas数据结构介绍 2.1.1 Series Series是一种一维的数据...

  • pandas入门 02 数据结构

    0 pandas数据结构简介 pandas主要处理下面三种数据结构 Series DataFrame Panel ...

  • 第5章 Pandas入门(1)

    以下内容主要学习自《利用Python进行数据分析》 第5章 Pandas入门(1) pandas所包含的数据结构和...

  • 2021-12-31 Python-23

    pandas pandas数据结构 pandas 有 2 个常用的数据结构:Series 和 Dataframe一...

  • 第八章 绘图和可视化

    [链接] 01. matplotlib API入门 02. Pandas中的绘图函数 03. 绘制地图:图形化显示...

  • Pandas-2019-03-14

    Pandas Pandas 介绍 Pandas主要处理的数据结构 ·系列(Series)·数据帧(DataFram...

  • pandas 数据结构简介

    pandas 数据结构及构建 pandas 主要有两种数据结构: Series 和 DataFrame。Serie...

网友评论

    本文标题:pandas入门 02 数据结构

    本文链接:https://www.haomeiwen.com/subject/xbnllftx.html