Python panads数据处理一

文件读入

Pandas可以将读取到的表格型数据(文件不一定要是表格)转成DataFrame类型的数据结构,然后我们可以通过操作DataFrame进行数据分析,数据预处理以及行和列的操作等。

1、read_csv函数

功能:从文件、URL、文件新对象中加载带有分隔符的数据(无论文件尾缀是什么),默认分隔符是逗号(可以更改参数 sep=",")。

文件形如:

a,b,c,d,name
1,2,3,4,python
5,6,7,8,java
9,10,11,12,c++

 使用情形一

    data = pd.read_csv("data.txt")
    print(data) # 在只含路径参数时,行索引自动数字,列索引默认第一行
    '''
       a   b   c   d    name
    0  1   2   3   4  python
    1  5   6   7   8    java
    2  9  10  11  12     c++
    '''

使用情形二

df = pd.read_csv("a.txt", header=None)
print(df)

0   1   2   3       4
0  a   b   c   d    name
1  1   2   3   4  python
2  5   6   7   8    java
3  9  10  11  12     c++


import pandas as pd
df = pd.read_csv("a.txt", header=0)
print(df)

   a   b   c   d    name
0  1   2   3   4  python
1  5   6   7   8    java
2  9  10  11  12     c++

使用情形三

df = pd.read_csv("a.txt", names=["z","x","c","v","b"])  # 分配列索引给表格
print(df)  

   z   x   c   v       b
0  a   b   c   d    name
1  1   2   3   4  python
2  5   6   7   8    java
3  9  10  11  12     c++

使用情形四

df = pd.read_csv("a.txt", index_col="name")  # 指定原文件的某一列作为行索引
print(df)

        a   b   c   d
name                 
python  1   2   3   4
java    5   6   7   8
c++     9  10  11  12

使用情形五

df = pd.read_csv("a.txt", nrows=2)  # 指定读取文件的行数
print(df)

   a  b  c  d    name
0  1  2  3  4  python
1  5  6  7  8    java

2.read_excel函数

pd.read_excel(io, sheetname=0,header=0,skiprows=None,index_col=None,names=None)

使用方法和cvs一致。

Padas的简单使用

pandas的两个基本的数据结构之一:Series

  • 它是将要介绍的另外一个数据结构的单元数据结构,相当于一个矩阵中的列向量,不过,这个列向量是由另一个相关的索引向量标记的,索引在左边,值在右边;形如:
# 创建默认索引的

obj = pd.Series([2,9,5,6])
obj
Out[4]: 
0    2
1    9
2    5
3    6
dtype: int64


# 创建指定索引的

obj2 = pd.Series([3,3,4,4,5],index=['a','b','c','d','e'])
obj2
Out[10]: 
a    3
b    3
c    4
d    4
e    5
dtype: int64

# 强制更改索引

obj2.index = ["o","v","c","l"]

没有指定索引,默认是从 0 - N-1。

  • 可以通过Series的两个属性,index 和 value  来分别获取索引和值
obj.index
Out[5]: RangeIndex(start=0, stop=4, step=1)

obj.values
Out[7]: array([2, 9, 5, 6], dtype=int64)
  • 支持字典式取值,字典式 in 询问
obj2['a']
Out[12]: 3
  • 支持字典创建
obj3=pd.Series({"a":1,"b":2,"c":3})
obj3
Out[14]: 
a    1
b    2
c    3
dtype: int64


# 如果字典创建的时候,还指定了索引顺序,那么将按照指定的索引排列,可以抛弃某个旧的索引(此条目将丢失),也可以创建新的索引,原来没有将为nan.

obj3=pd.Series({"a":1,"b":2,"c":3},index=["b","a","d"])
obj3
Out[16]: 

b    2.0
a    1.0
d    NaN
dtype: float64
  • 检测是否有nan值
pd.isnull(obj3)
Out[17]: 
b    False
a    False
d     True
dtype: bool
  • Seriers 在运算时以 索引自动对齐运算
obj2+obj3
Out[19]: 
a    4.0
b    5.0
c    NaN
d    NaN
e    NaN
dtype: float64
  • Series 索引的 name 和 值的 name(相当于这两个向量的名字)
obj3.name
obj3.name="population"
obj3.index.name="ind"
obj3
Out[23]: 
ind
b    2.0
a    1.0
d    NaN
Name: population, dtype: float64

pandas的两个基本的数据结构之二:DataFrame

构造DF

  • DataFrame是一个典型的表格型数据,既有行索引,又有列索引。可以看成是,一个大字典,字典的键是 列索引,字典的值是一个Series;  构成这些索引的每一个值的Series都是共用一个 Series 索引的。
data = {"cities":["bj","bj","bj","bj"],
        "year":[2001,2002,2003,2004],
        "popular":[8,9,10,11]}
df = pd.DataFrame(data)
df
Out[34]: 
  cities  year  popular
0     bj  2001        8
1     bj  2002        9
2     bj  2003       10
3     bj  2004       11

# 和serries一样(通过字典创建时指定index),Dataframe 创建的时候可以指定columns

df1 = pd.DataFrame(data,columns=["year","popular","new"])
df1
Out[36]: 
   year  popular  new
0  2001        8  NaN
1  2002        9  NaN
2  2003       10  NaN
3  2004       11  NaN


''' 也可以用字典的字典创建'''

data = {"cities":{2001:"bj",2002:"bj",2003:"bj"}, "money":{2004:20000,2002:10000,2003:1500}}
df3 = pd.DataFrame(data)
df3
Out[48]: 
     cities    money
2001     bj      NaN
2002     bj  10000.0
2003     bj   1500.0
2004    NaN  20000.0
  • DataFrame 默认通过 列索引获取一个series;(在series中默认通过索引获取一个值)
df["popular"] 或者 df.popular
Out[37]: 
0     8
1     9
2    10
3    11
Name: popular, dtype: int64
  • DataFrame 通过 ix 间接获取行向量,行向量也是一个series,它的索引是原来DF的列索引。
df.loc[2]
Out[40]: 
cities       bj
year       2003
popular      10
Name: 2, dtype: object
  • 列可以通过直接赋值的方式修改
df["popular"]=2
df
Out[43]: 
  cities  year  popular
0     bj  2001        2
1     bj  2002        2
2     bj  2003        2
3     bj  2004        2
  • DateFrame中产生新的列,就是为不存在的列名赋值即可
df["my_add"]=[1,1,4,5]
df
Out[45]: 
  cities  year  popular  my_add
0     bj  2001        2       1
1     bj  2002        2       1
2     bj  2003        2       4
3     bj  2004        2       5
  • 注意,DF中通过索引返回的series都是视图,一切的修改都会反映到DF上面。

 

  • DF的转置,很简单,就是行变成列,列变成行。
df3
Out[48]: 

     cities    money
2001     bj      NaN
2002     bj  10000.0
2003     bj   1500.0
2004    NaN  20000.0


df3.T
Out[49]: 

       2001   2002  2003   2004
cities   bj     bj    bj    NaN
money   NaN  10000  1500  20000

除了这些常用的构造DF方法外,DataFrame还可以接收 (二维数组,numpy二维数组)

DF的基本功能

  • 和series一样设置 index 与 columns 的name属性 值
df.index.name="index_"
df.columns.name="rrr"
df
Out[52]: 
rrr    cities  year  popular  my_add
index_                              
0          bj  2001        2       1
1          bj  2002        2       1
2          bj  2003        2       4
3          bj  2004        2       5
  • 与series一样,values属性返回 二维表的值
df.values
Out[53]: 
array([['bj', 2001, 2, 1],
       ['bj', 2002, 2, 1],
       ['bj', 2003, 2, 4],
       ['bj', 2004, 2, 5]], dtype=object)
  • index对象,轴标签(就是DF的行标签)

index一旦设定不可更改

df3
Out[55]: 
     cities    money
2001     bj      NaN
2002     bj  10000.0
2003     bj   1500.0
2004    NaN  20000.0
df3.index
Out[56]: Int64Index([2001, 2002, 2003, 2004], dtype='int64')
  • 重新索引 reindex 功能

由于索引 index 不可更改,所以,这个方法将创建一个适应新索引的 新的 DF对象

df3
Out[55]: 
     cities    money
2001     bj      NaN
2002     bj  10000.0
2003     bj   1500.0
2004    NaN  20000.0



df4=df3.reindex([2011,2002,2003])
df4
Out[60]: 

     cities    money
2011    NaN      NaN
2002     bj  10000.0
2003     bj   1500.0

注意,如果新的索引以前不存在,将默认nan,不过可以在 reinde 中用 fill_value 参数指定nan为其他数值。method参数可以指定像前或向后插值填充。

  • reindex 默认“修改” 行索引,通过参数columns=[  ];修改列索引
Out[61]: 
     cities    money
2001     bj      NaN
2002     bj  10000.0
2003     bj   1500.0
2004    NaN  20000.0
df3.reindex(columns=["yingtan","nanchang"])
Out[62]: 
      yingtan  nanchang
2001      NaN       NaN
2002      NaN       NaN
2003      NaN       NaN
2004      NaN       NaN

注意,可以同时在reindex中利用 index=[    ] , columns= [   ];对行列同时重新索引。

  • 丢弃指定轴上的项(可以用reindex,整体选择留下来的df新对象,也可以用drop来生成一个删除特定项的新df对象)
df3
Out[63]: 

     cities    money
2001     bj      NaN
2002     bj  10000.0
2003     bj   1500.0
2004    NaN  20000.0


df_0 = df3.drop([2002])
df_0
Out[66]: 
     cities    money
2001     bj      NaN
2003     bj   1500.0
2004    NaN  20000.0

注意dorp默认是drop行的数据,如果需要drop列的数据,加参数 axis=1

 

p130

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值