Dataframe的多种创建方法
"二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。
Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构
# Dataframe是一个表格型数据结构,“带有标签的二维数组”
# Dataframe带有index(行标签)和columns(列标签)
import pandas as pd
data = {'name':['jack', 'tom', 'mary'],
'age':[18, 19, 20],
'gender':['m', 'n', 'w']}
frame = pd.DataFrame(data)
# 查看数据,数据类型是Dataframe
print(frame, type(frame))
print('----------')
# index查看行标签
print(frame.index)
print('----------')
# columns查看列标签
print(frame.columns)
print('------------')
# values查看值,数据类型是ndarray
print(frame.values)
其结果为:
name age gender
0 jack 18 m
1 tom 19 n
2 mary 20 w <class 'pandas.core.frame.DataFrame'>
----------
RangeIndex(start=0, stop=3, step=1)
----------
Index(['name', 'age', 'gender'], dtype='object')
------------
[['jack' 18 'm']
['tom' 19 'n']
['mary' 20 'w']]
Dataframe创建方法一:由数组list组成的字典
# Dataframe创建方法一:由数组list组成的字典
# 创建方法:pandas.Dataframe()
import numpy as np
data1 = {'a':[1, 2, 3],
'b':[2, 3, 4],
'c':[3, 4, 5]}
data2 = {'one':np.random.rand(3),
'two':np.random.rand(3)}
d1 = pd.DataFrame(data1)
d2 = pd.DataFrame(data2)
print(d1)
print(d2)
# 由数组组成的字典,创建Dataframe是,columns为字典key,index为默认数字标签
# 字典的值得长度必须保持一致
运行结果为:
a b c
0 1 2 3
1 2 3 4
2 3 4 5
one two
0 0.375900 0.123650
1 0.767906 0.162349
2 0.247377 0.725446
其中pd.Dataframe中index和columns两个参数的用法:
d3 = pd.DataFrame(data1, index=['a', 'b', 'c'])
print(d3)
# index参数:重新定义index,格式为list,长度必须保持一致
-----------------------------------
其输出结果为:
a b c
a 1 2 3
b 2 3 4
c 3 4 5
d4 = pd.DataFrame(data1, columns=['c', 'a', 'b', 'd'])
d5 = pd.DataFrame(data1, columns=['b', 'a'])
print(d4)
print(d5)
# columns参数:可以重新指定列的顺序,格式为list,如果现有数据中没有该列(比如'd'),则产生NaN值)
# column重新指定时,指定列的数量可以少于原数据
-------------------------------------------------
运行结果为:
c a b d
0 3 1 2 NaN
1 4 2 3 NaN
2 5 3 4 NaN
b a
0 2 1
1 3 2
2 4 3
Dataframe创建方法二:由Series组成的字典
# Dataframe创建方法二:由Series组成的字典
data1 = {'one':pd.Series(np.random.rand(2)),
'two':pd.Series(np.random.rand(3))} # 没有设置index的Series
data2 = {'one':pd.Series(np.random.rand(2), index=['a', 'b']),
'two':pd.Series(np.random.rand(3), index=['a', 'b', 'c'])} # 设置了index的Series
print(data1)
print(data2)
print('-----------------------------------------')
d1 = pd.DataFrame(data1)
d2 = pd.DataFrame(data2)
print(d1)
print(d2)
# 由Series组成的字典创建Dataframe,字典key为columns,Series的标签为index(如果Series没有指定标签,则默认数字标签)
# Series可以长度不一样,生成的Dataframe会出现NaN值(空值)
==================
其运行结果如下:
{'one': 0 0.032825
1 0.532207
dtype: float64, 'two': 0 0.507928
1 0.162757
2 0.305730
dtype: float64}
{'one': a 0.043109
b 0.390991
dtype: float64, 'two': a 0.141395
b 0.794620
c 0.452888
dtype: float64}
-----------------------------------------
one two
0 0.032825 0.507928
1 0.532207 0.162757
2 NaN 0.305730
one two
a 0.043109 0.141395
b 0.390991 0.794620
c NaN 0.452888
Dataframe创建方法三:通过二维数组直接创建
# Dataframe创建方法三:通过二维数组直接创建
ar = np.random.rand(9).reshape(3, 3)
print(ar)
print('---------------------------')
d1 = pd.DataFrame(ar)
d2 = pd.DataFrame(ar, index=['a', 'b', 'c'], columns=['one', 'two', 'three'])
print(d1)
print(d2)
# 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回默认数字格式
# index和columns指定长度与原数组应一致
==================
其输出结果为:
[[0.0174177 0.80157922 0.85656898]
[0.89648197 0.29269994 0.802793 ]
[0.42646779 0.88849482 0.76086702]]
0 1 2
0 0.017418 0.801579 0.856569
1 0.896482 0.292700 0.802793
2 0.426468 0.888495 0.760867
one two three
a 0.017418 0.801579 0.856569
b 0.896482 0.292700 0.802793
c 0.426468 0.888495 0.760867
Dataframe创建方法四:由字典组成的列表
# Dataframe创建方法四:由字典组成的列表
data = [{'one':1, 'two':2}, {'one':5, 'two':10, 'three':20}]
d1 = pd.DataFrame(data)
d2 = pd.DataFrame(data, index=['a', 'b'])
d3 = pd.DataFrame(data, columns=['one', 'two', 'three']) # 重新排序
d4 = pd.DataFrame(data, columns=['one', 'two'])
print(d1)
print(d2)
print(d3)
print(d4)
# 由字典组成的列表创建Dataframe,字典key为columns,index不能指定为默认数组标签
# columns和index参数分别重新指定相应列及行标签
-------------------------------------------
其运行结果为:
one three two
0 1 NaN 2
1 5 20.0 10
one three two
a 1 NaN 2
b 5 20.0 10
one two three
0 1 2 NaN
1 5 10 20.0
one two
0 1 2
1 5 10