Pandas(1)

1.pandas介绍

 pandas是Python的数据分析的核心库,它提供了一系列能够快速、便捷     的处理结构化数据的数据结构和函数。Python之所以成为强大而高效的数据分析环    境与它息息相关。
 pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库灵活的数据处理功能。

2.pandas网址

   参见https://blog.csdn.net/Yan_Joy/article/details/78095115

3.引pandas包

 import pandas [as 别名]

     如 import pandas as pd 

4.pandas提供的主要数据结构

- Series: 用于处理一维数据。

  Series是一种类似于数组的一维数据结构,包含了一系列的元素以及元素对应 的标签。
*元素的标签称为index。*

- DataFrame:用于处理二维数据。

 DataFrame是一种带标签的二维数据结构,其中各列可以存储不同的数据类型。 

1.series

定义:

from pandas import Series
print("第一种定义方式:基于字典创建")
s1 = Series({"a":1,"b":2,"c":3})
print("s1的值为:",s1.values)
print("s1的索引为:",s1.index)
print("\n")
print("第二种定义方式:定义时指定index")
s2 = Series([2,8,-7,-2,1],index=['a','b','c','d','e'])
print("s2的值为:",s2.values)
print("s2的索引为:",s2.index)

############运行结果############
第一种定义方式:基于字典创建
s1的值为: [1 2 3]
s1的索引为: Index(['a', 'b', 'c'], dtype='object')


第二种定义方式:定义时指定index
s2的值为: [ 2  8 -7 -2  1]
s2的索引为: Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

访问:

s1 = Series({"a":1,"b":2,"c":3})
s2 = Series([2,8,-7,-2,1],index=['a','b','c','d','e'])

#单值
print("s2[2],s2['b']的结果是:\n",s2[2],s2['b'])
#多元素访问
print("s2[['a','d','c']]的结果是:\n",s2[['a','d','c']])
#切片
print("s2[:2]的结果是:\n",s2[:2])
print("s2[2:]的结果是:\n",s2[2:])
print("s2[-3:]的结果是:\n",s2[-3:])
############运行结果############
s2[2],s2['b']的结果是:
 -7 8
s2[['a','d','c']]的结果是:
 a    2
d   -2
c   -7
dtype: int64
s2[:2]的结果是:
 a    2
b    8
dtype: int64
s2[2:]的结果是:
 c   -7
d   -2
e    1
dtype: int64
s2[-3:]的结果是:
 c   -7
d   -2
e    1
dtype: int64

运算操作:*,过滤,map,索引

s4=Series([10,2,47,12,1],index=['a','b','c','d','e'])

print("s4*2输出为:\n",s4*2)  #不会修改原来的s4


############运行结果############
s4*2输出为:
 a    20
b     4
c    94
d    24
e     2
dtype: int64

过滤

#过滤
print("s4[s4>1]过滤操作结果为:\n",s4[s4>1])

############运行结果############

s4[s4>1]过滤操作结果为:
 a    10
b     2
c    47
d    12
dtype: int64

map

#map:判断索引里面有没有,
#'b' in s4 ='b' in s4.index
print("'a'in s4的结果是:\n",'a'in s4)
print("'g'in s4的结果是:\n",'g'in s4)

############运行结果############

'a'in s4的结果是:
 True
'g'in s4的结果是:
 False
#可更改索引
print("s4.index的结果是:\n",s4.index)   #返回时一个别的
s4.index = list('zxcvb')
print("s4.index = list('zxcvb')的结果是:\n",s4.index)

############运行结果############

s4.index的结果是:
 Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
s4.index = list('zxcvb')的结果是:
 Index(['z', 'x', 'c', 'v', 'b'], dtype='object')

2.DataFrame

定义

from pandas import DataFrame
data1 = {'int':[1,2,3],
          'float':[1.2,3.1,3.5],
          'string':['a','b','c']}
df1 = DataFrame(data1)
print("df1是:",df1)

print("这样的顺序可能会有错误,可以指定column顺序和index值")
df2 = DataFrame(data1,columns=['float','string','int','na_column'],index = ['x','y','z'])
print(df2)

############运行结果############

df1是:    int  float string
0    1    1.2      a
1    2    3.1      b
2    3    3.5      c
这样的顺序可能会有错误,可以指定column顺序和index值
   float string  int na_column
x    1.2      a    1       NaN
y    3.1      b    2       NaN
z    3.5      c    3       NaN

3.Series和DataFrame区别

print("s1的类型是",type(s1))
print("df1的类型是",type(df1))

############运行结果############

s1的类型是 <class 'pandas.core.series.Series'>
df1的类型是 <class 'pandas.core.frame.DataFrame'>

获取:

data2 = {'int':[1,2,3,4],
          'float':[1.2,3.1,3.5,4.4],
          'string':['a','b','c','d']}
df2 = DataFrame(data2)
#获取一列
s1 = df2.int
print("s1 = df2.int的获取结果是:\n",s1)   # print(s1= df2.int)会出现错误

############运行结果###########

s1 = df2.int的获取结果是:
 0    1
1    2
2    3
3    4
Name: int, dtype: int64

两种形式:
s1 = df2.int
s2 = df2[‘float’]

print("s1类型是",type(s1))
print("\n")
s2 = df2['float']
print("s2 = df2['float']的获取结果是:\n",s2)
print("\n")
print("s2类型是",type(s2))

############运行结果###########

s1类型是 <class 'pandas.core.series.Series'>


s2 = df2['float']的获取结果是:
 0    1.2
1    3.1
2    3.5
3    4.4
Name: float, dtype: float64


s2类型是 <class 'pandas.core.series.Series'>

删除:

#删除列
print("原DataFrame是:\n",df2)
del df2['int']
print("删除后的DataFrame是:\n",df2)

############运行结果###########

原DataFrame是:
    int  float string
0    1    1.2      a
1    2    3.1      b
2    3    3.5      c
3    4    4.4      d
删除后的DataFrame是:
    float string
0    1.2      a
1    3.1      b
2    3.5      c
3    4.4      d

增加:

#增加列 
import pandas as pd
df2['int1']=pd.Series([10,20,30],index=['x','y','z'])
print("添加后的df2为:\n",df2['int1'])

############运行结果###########

添加后的df2为:
 0     NaN
1     NaN
2     NaN
3     NaN
x    10.0
y    20.0
z    30.0
Name: int1, dtype: float64

获取行:

#获取行
row = df2.loc['x']      #按索引
print ("df2.loc['x']的结果是:\n",row) 
row1 = df2.iloc[2]
print("df2.iloc[2]的结果是:\n",row1)#按位置
row3 = df2[1:2]     #行切片
print(" df2[1:2]的结果是:\n",row3)

############运行结果###########

df2.loc['x']的结果是:
 float     4.8
int         4
int1       10
string      d
Name: x, dtype: object
df2.iloc[2]的结果是:
 float     3.5
int       NaN
int1      NaN
string      c
Name: 2, dtype: object
 df2[1:2]的结果是:
    float  int  int1 string
1    3.1  NaN   NaN      b

拓展行:

#扩展行
data = {'int':[4],  'float':[4.8],  'string':['d']}
df5 = DataFrame(data,columns=['float','string','int'],index = ['x','y','z'])
df2 = df2.append(df5)

删除行:

#删除行:么有pop,没有del
df2 = df2.drop('x')
print(df2.drop('x'))

其他操作:

data1 = {'int':[1,2,3,4,5],
          'float':[1.2,3.1,3.5,2.2,6.3],
          'string':['a','b','c','t','u'],
         'int':[7,8,9,5,5],
          'float':[1.2,3.1,3.5,3.5,3.2],}
df = DataFrame(data1)
print("df是:\n",df2)
df.head()  #默认查看前5行
print("查看前5行:\n",df.head())

df.tail(3)  #默认查看后5行
print("查看后5行:\n",df.tail(3) )

df.describe()  #对数据进行快速总结
print("数据进行快速总结:\n",df.describe()  )

df.T #转置数据
print("转置数据:\n",df.T )

############运行结果###########

df是:
    float  int  int1 string
0    1.2  NaN   NaN      a
1    3.1  NaN   NaN      b
2    3.5  NaN   NaN      c
3    4.4  NaN   NaN      d
y    4.8  NaN  20.0      d
z    4.8  NaN  30.0      d
x    4.8  4.0   NaN      d
y    4.8  4.0   NaN      d
z    4.8  4.0   NaN      d
查看前5:
    int  float string
0    7    1.2      a
1    8    3.1      b
2    9    3.5      c
3    5    3.5      t
4    5    3.2      u
查看后5:
    int  float string
2    9    3.5      c
3    5    3.5      t
4    5    3.2      u
数据进行快速总结:
             int     float
count  5.000000  5.000000
mean   6.800000  2.900000
std    1.788854  0.966954
min    5.000000  1.200000
25%    5.000000  3.100000
50%    7.000000  3.200000
75%    8.000000  3.500000
max    9.000000  3.500000
转置数据:
           0    1    2    3    4
int       7    8    9    5    5
float   1.2  3.1  3.5  3.5  3.2
string    a    b    c    t    u

统计方法:

df2.sum()    #求和
df2.mean()  #平均值
df3 = DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]})
df4 = DataFrame({'a': [10, 20, 30], 'b': [40, 50, 60], 'c': [70, 80, 90]})
print("df3+df4的求和结果是:\n",df3+df4)

############运行结果###########

df3+df4的求和结果是:
     a   b   c
0  11  44  77
1  22  55  88
2  33  66  99

4.文件读写

pandas:Excel

# 读取
xls = pd.ExcelFile('data_excel.xlsx')
df = xls.parse('data')
xls.parse()
print(df)
# 写入
df.to_excel('data_excel_out.xls',index=False,header=True)

pandas:CSV

# 读取csv,默认第一行为title
df_header = pd.read_csv('data_title.csv')

# 设定分隔符sep
df_header1 = pd.read_csv('data_cn副本.csv', sep=',', encoding='gbk')
fh = open('data_cn副本.csv')
df_title1 = pd.read_csv(fh)
print(df_title1)
# 读取无title的csv
df_noheader = pd.read_csv('data_notitle.csv', header=None)

# 添加列名
df_noheader1 = pd.read_csv('data_notitle.csv', names=['a', 'b', 'c', 'message'])

# 以某列值为索引
names = ['a', 'b', 'c', 'd', 'message']
df_noheader2 = pd.read_csv('data_notitle.csv', names=names, index_col='message')
# 以某列值为索引
names = ['a', 'b', 'c', 'd', 'message']
df_noheader2 = pd.read_csv('data_notitle.csv', names=names, index_col='message’)

# 读取不标准分隔符文件,可以用正则表达式进行匹配
df_blank = pd.read_csv('data_blank.csv', sep='\s+')

# 忽略N行,从第一行开始
df_blank1 = pd.read_csv('data_blank.csv', sep='\s+', skiprows=2)

# 忽略第N行,从0计数
df_blank1 = pd.read_csv('data_blank.csv', sep='\s+', skiprows=[2])

# 读取前N+1行
df_blank2 = pd.read_csv('data_blank.csv', sep='\s+', nrows=0)
df_out = pd.read_csv('data_out.csv’)
# 默认形式写入
df_out.to_csv('out_blask1.csv’)
# 设定分隔符及空值形式
df_out.to_csv('out_blank1.csv', sep='|', na_rep='NaN’)
#不写入head和index
df_out.to_csv('out_blank1.csv', sep='|', na_rep='NaN', header=False, index=False)
#追加模式
df_out.to_csv(mode='a')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值