版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_1290259791/article/details/83120262
Pandas入门学习
Pandas下面有两种常用数据结构,
Series
和DataFrame
1、Series
系列(Series)是能够保存任何类型的数据的一维标记数组。
轴标签统称为索引
Series的构造
pandas.Series( data, index, dtype, copy)
参数 | 描述 |
---|---|
data | 数据采集的形式如:ndarray、list、dict |
index | 索引值必须是唯一的和散列的,与数据长度相同。默认:np.arange(n) |
dtype | dtype 数据类型。默认:推断数据类型 |
copy | 复制数据。默认:False |
创建Series
ndarray创建Series
如果数据是
ndarray
,传递的索引必须具有相同长度。
没有传递索引值,默认索引是返回n,n是数组长度。
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s1 = pd.Series(data)
s2 = pd.Series(data, index=list('ABCD'))
print(s1)
print(s2)
0 a
1 b
2 c
3 d
dtype: object
A a
B b
C c
D d
dtype: object
dict创建Series
dict
作为输入传递,如果没有指定索引,则按字典键构造索引
如果指定索引,索引中与标签对于的数据值将被拉出
import pandas as pd
import numpy as np
data = {'a':0, 'b':1, 'c':2}
s1 = pd.Series(data)
s2 = pd.Series(data, index=list('bcad'))
print(s1)
print(s2)
a 0
b 1
c 2
dtype: int64
b 1.0
c 2.0
a 0.0
d NaN
dtype: float64
注意: 指定索引,索引顺序不变,缺少的元素使用NaN
填充。
标量创建Series
数据是标量,必须提供索引,将重复该值匹配索引的长度
import pandas as pd
import numpy as np
s = pd.Series(4, index=list(range(4)))
print(s)
0 4
1 4
2 4
3 4
dtype: int64
访问Series数据
系列(Series)中的数据可以使用类似于访问
ndarray
中的数据来访问。
使用指定位置访问Series
import pandas as pd
import numpy as np
s = pd.Series([1,2,3,4], index = list('abcd'))
print(s[0])
print(s[:3])
print(s[-1:])
1
a 1
b 2
c 3
dtype: int64
d 4
dtype: int64
使用标签访问Series
import pandas as pd
import numpy as np
s = pd.Series([1,2,3,4], index = list('abcd'))
print(s['a'])
print(s[['a','c']])
1
a 1
c 3
dtype: int64
2、DataFrame
数据帧(DataFrame)是二维数组结构,数据以行和列的表格方式排列。
DataFrame的构造
pandas.DataFrame( data, index, columns, dtype, copy)
参数 | 描述 |
---|---|
data | 数据采集的形式,如:ndarray、series、map、list、dict、constant或DataFrame |
index | 行标签。默认索引np.arange(n) |
columns | 列标签。默认索引np.arange(n) |
dtype | 每列数据类型 |
copy | 复制数据。默认:False |
创建DataFrame
DataFrame 可以使用各种输入创建
- 列表
- 字典
- 系列
- Ndarrays
- 另一个DataFrame
列表创建DataFrame
使用单个列表或列表列表创建DataFrame
import pandas as pd
import numpy as np
data1 = [1,2,3,4,5]
data2 = [['a',1],['b',2],['c',3]]
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2, columns=['A', 'B'])
print(df1)
print(df2)
0
0 1
1 2
2 3
3 4
4 5
A B
0 a 1
1 b 2
2 c 3
ndarrays/Lists的字典创建DataFrame
所有的
ndarrays
必须有相同的长度。
如果传递索引index
,则索引的长度应等于数组的长度。
如果没有传递索引,默认情况将range(n)作为索引。
import pandas as pd
import numpy as np
data = {'A':['a','b','c'],'B':[1,2,3]}
df = pd.DataFrame(data)
df1 = pd.DataFrame(data, index=list('ABC'))
print(df)
print(df1)
A B
0 a 1
1 b 2
2 c 3
A B
A a 1
B b 2
C c 3
列表创建DataFrame
import pandas as pd
import numpy as np
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
df1 = pd.DataFrame(data, index=['first','second'])
print(df)
print(df1)
a b c
0 1 2 NaN
1 5 10 20.0
a b c
first 1 2 NaN
second 5 10 20.0
用Series的字典创建DataFrame
字典的系列传递形成一个DataFrame,得到的索引是所有Series索引的并集。
import pandas as pd
import numpy as np
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
b 2.0 2
c 3.0 3
d NaN 4
DataFrame列选择
import pandas as pd
import numpy as np
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
DataFrame列添加
import pandas as pd
import numpy as np
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)
df['three'] = pd.Series([10,20,30], index=['a','b','e'])
df['four'] = df['one'] + df['three']
print(df)
one two three four
a 1.0 1 10.0 11.0
b 2.0 2 20.0 22.0
c 3.0 3 NaN NaN
d NaN 4 NaN NaN
DataFrame列删除
列可以删除或弹出
import pandas as pd
import numpy as np
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)
del df['one']
df.pop('two')
print(df)
Empty DataFrame
Columns: []
Index: [a, b, c, d]
DataFrame行选择
通过行标签传递给
loc()
函数来进行选择行。
import pandas as pd
import numpy as np
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.loc['b'])
one 2.0
two 2.0
Name: b, dtype: float64
通过将正整数传递给
iloc()
函数进行选择行。
import pandas as pd
import numpy as np
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.iloc[1])
one 2.0
two 2.0
Name: b, dtype: float64
DataFrame行切片
使用
:
运算符选择多行
import pandas as pd
import numpy as np
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[2:4])
one two
c 3.0 3
d NaN 4
DataFrame行添加
使用
append()
函数将新行添加到DataFrame
import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
print(df)
a b
0 1 2
1 3 4
0 5 6
1 7 8
DataFrame行删除
使用索引行标签从
DataFrame
中删除行
标签重复,会删除多行
import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
df = df.drop(0)
print(df)
a b
1 3 4
1 7 8