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

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章