Python基础教程(四)Pandas--DataFrame

DataFrame 表格型数据对象

DataFrame数据框架是一种二维数据结构,即数据按行和列的表格方式排列。

DataFrame的创建

可以使用以下构造函数创建一个pandas DataFrame -

pandas.DataFrame( data, index, columns, dtype, copy)
No参数说明
1data数据采用各种形式,如ndarray,序列,地图,列表,字典,常量和另一个DataFrame。
2index对于行标签,如果没有索引被传递,则要用于结果帧的索引是可选缺省值np.arrange(n)。
3columns对于列标签,可选的默认语法是 - np.arrange(n)。这只有在没有通过索引的情况下才是正确的。
4dtype每列的数据类型。
5copy如果默认值为False,则使用该命令(或其它)复制数据。

从列表中创建一个DataFrame

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

字典列表可以作为输入数据传递以创建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

DataFrame的常用属性

No属性说明
1index获取索引
2T转置
3columns获取列索引
4values获取值数组
5describe()获取快速统计

例子:

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)

index行索引

print(df1.index)    #行索引

输出

Index(['a', 'b', 'c', 'd'], dtype='object')

columns列索引

print(df1.columns)  #列索引

输出

Index(['one', 'two'], dtype='object')

values值(二维数组)

print(df1.values)   #值(二维数组)

输出

[[ 1.  4.]
 [ 2.  5.]
 [ 3.  6.]
 [nan  7.]]

T转置

print(df1.T)        #转置

输出

       a    b    c    d
one  1.0  2.0  3.0  NaN
two  4.0  5.0  6.0  7.0

describe描述信息

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方法选取。并且不要使用连续两个中括号。

  • loc属性:将索引解释为标签
  • iloc属性:将索引解释为下标

列选择

import pandas as pd

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

行选择

  • 按标签选择:可以通过将行标签传递给 loc 函数来选择行。
  • 按整数位置选择:行可以通过将整数位置传递给 iloc 函数来选择。
import pandas as pd

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

例子

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
fillna
print(df1.fillna(0))

输出

   one   two
a  2.0   8.0
c  6.0  12.0
d  NaN  14.0
b  NaN   NaN
dropna

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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值