DataFrame数据框架是一种二维数据结构,即数据按行和列的表格方式排列。
可以使用以下构造函数创建一个pandas DataFrame -
pandas.DataFrame( data, index, columns, dtype, copy)
No | 参数 | 说明 |
---|---|---|
1 | data | 数据采用各种形式,如ndarray,序列,地图,列表,字典,常量和另一个DataFrame。 |
2 | index | 对于行标签,如果没有索引被传递,则要用于结果帧的索引是可选缺省值np.arrange(n)。 |
3 | columns | 对于列标签,可选的默认语法是 - np.arrange(n)。这只有在没有通过索引的情况下才是正确的。 |
4 | dtype | 每列的数据类型。 |
5 | copy | 如果默认值为False,则使用该命令(或其它)复制数据。 |
DataFrame可以使用单个列表或列表列表创建。
例1
data = [1,2,3,4]
df = pd.DataFrame(data,index=[list('abcd')],columns=['data'])
print(df)
输出
data
a 1
b 2
c 3
d 4
例2
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print(data)
print( df)
[['Alex', 10], ['Bob', 12], ['Clarke', 13]]
Name Age
0 Alex 10
1 Bob 12
2 Clarke 13
字典列表可以作为输入数据传递以创建DataFrame。字典键默认作为列名。
df1 = pd.DataFrame({
'one':[1,2,3],'two':[4,5,6]},index=['a','b','c'])
print(df1)
输出
one two
a 1 4
b 2 5
c 3 6
No | 属性 | 说明 |
---|---|---|
1 | index | 获取索引 |
2 | T | 转置 |
3 | columns | 获取列索引 |
4 | values | 获取值数组 |
5 | describe() | 获取快速统计 |
例子:
df1 = pd.DataFrame({
'one':pd.Series([1,2,3],index=['a','b','c']),\
'two':pd.Series([4,5,6,7],index=['a','b','c','d'])},index=['a','b','c','d'])
print(df1)
print(df1.index) #行索引
输出
Index(['a', 'b', 'c', 'd'], dtype='object')
print(df1.columns) #列索引
输出
Index(['one', 'two'], dtype='object')
print(df1.values) #值(二维数组)
输出
[[ 1. 4.]
[ 2. 5.]
[ 3. 6.]
[nan 7.]]
print(df1.T) #转置
输出
a b c d
one 1.0 2.0 3.0 NaN
two 4.0 5.0 6.0 7.0
print(df1.describe()) #对于每一列的描述信息
输出
one two
count 3.0 4.000000
mean 2.0 5.500000
std 1.0 1.290994
min 1.0 4.000000
25% 1.5 4.750000
50% 2.0 5.500000
75% 2.5 6.250000
max 3.0 7.000000
与Series相似,建议使用loc方法选取。并且不要使用连续两个中括号。
df1 = pd.DataFrame({
'one':pd.Series([1,2,3],index=['a','b','c']),\
'two':pd.Series([4,5,6,7],index=['a','b','c','d'])},index=['a','b','c','d'])
print(df1)
print(df1.loc['a','one']) #逗号隔开,逗号前面表示列,后面表示行
print(df1.loc['a',:]) #
输出
one two
a 1.0 4
b 2.0 5
c 3.0 6
d NaN 7
1.0
one 1.0
two 4.0
Name: a, dtype: float64
例子
# DataFrame数据对齐
df1 = pd.DataFrame({
'one':pd.Series([1,2,3],index=['a','b','c']),\
'two':pd.Series([4,5,6,7],index=['a','b','c','d'])},index=['a','c','d','b'])
print(df1)
df2 = pd.DataFrame({
'one':pd.Series([1,2,3,8],index=['a','b','c','d']),\
'two':pd.Series([4,5,6,7],index=['a','b','c','d'])},index=['a','c','d','b'])
print(df2)
print(df1+df2)
输出
one two
a 1.0 4
c 3.0 6
d NaN 7
b 2.0 5
one two
a 1 4
c 3 6
d 8 7
b 2 5
one two
a 2.0 8
c 6.0 12
d NaN 14
b 4.0 10
方法 | 描述 |
---|---|
isnull | 判断是否为缺失值 |
notnull | 判断不是缺失值 |
fillna | 填充缺失值 |
dropna | 删除缺失值,含有axis 参数。默认情况下,axis = 0,即沿着行,这意味着如果行内的任何值为NA,则排除整行。 |
例子:
df3 = df1+df2
df3.loc['b','one'] = np.nan
df3.loc['b','two'] = np.nan
print(df3)
输出
one two
a 2.0 8.0
c 6.0 12.0
d NaN 14.0
b NaN NaN
print(df1.fillna(0))
输出
one two
a 2.0 8.0
c 6.0 12.0
d NaN 14.0
b NaN NaN
NaN所在的行列全部丢弃
print(df1.dropna()) # 默认how参数为‘any’,nan所在的行列全部丢弃
或者
print(df3.dropna(how='any'))
输出
one two
a 2.0 8.0
c 6.0 12.0
所在列或者行全为NaN,就把该行或者列删除
print(df3.dropna(how='all'))
输出
one two
a 2.0 8.0
c 6.0 12.0
d NaN 14.0