pandas包

Pandas處理以下三個數據結構(值可變) -建在Numpy數組之上:

  • 系列(Series):一維,大小不變,只允許存儲同類型數據
  • 數據幀(DataFrame):二維,大小可變,異構數據
  • 面板(Panel):三維,大小可變

參考:https://www.yiibai.com/pandas/python_pandas_data_structures.html

Series

相當於一維數組,可自定義索引(類似字典),默認索引0~N-1。下標訪問。

以下參考鏈接:https://blog.csdn.net/a346570643/article/details/79147794

from pandas import Series

obj=Series([4,7,-3])
print(obj[0])        #4
print(obj.values)    #[4,7,-3]
print(obj.index)     #RangeIndex(start=0, stop=3, step=1)
#自定義索引
obj=Series([1,3,-9],index=('a','b','c')) #index=可省略
print(obj['a'])         #1
print(obj['a','c'])     #取部分值 1 -9
print(obj['a','c']['a'])#1

print(obj[obj>0])       #只保留大於0的數 1,3
obj*2                   #每個元素都X2

可用字典初始化Series
date={'name':bella,'age':18}
obj=Series(date)
print(obj['name'])      #bella
state={'name'}
obj=Series(date,state)  #只保留date的'name'字段

DataFrame

一個Dataframe表示一個表格,類似電子表格的數據結構,包含一個經過排序的列表集,每一個都可以有不同的類型值(數字,字符串,布爾等等)。Datarame有行和列的索引;它可以被看作是一個Series的字典(每個Series共享一個索引)。在DataFrame裏的面向行和麪向列的操作大致是對稱的。在底層,數據是作爲一個或多個二維數組存儲的,而不是列表,字典,或其它一維的數組集合。

以下參考鏈接:https://blog.csdn.net/a346570643/article/details/79164832

from pandas import DataFrame,Series
import numpy as np

字典賦值
date={'name':['bob','bella'],'age':[13,18],'sex':['male','female']}
obj=DataFrame(date)
print(obj)
    name   age   sex
0    bob    13   male
1    bella  18   female

obj=DataFrame(date,columns={'name','age'})#只取name,age兩個字段
obj=DataFrame(date,columns={'name','height'})#date中無hieght字段仍創建height列,NA值填充
obj=DataFrame(date,columns={'name'},index=['a','b'])#可自定義行索引

嵌套字典賦值:外部鍵會被解釋爲列索引,內部鍵會被解釋爲行索引:
t={'gy':{201:4.4,200:3.3,202:5},'zl':{200:30,202:44}}
obj=DataFrame(t)
print(obj)
    gy    zl
200 3.3   30.0
201 4.4   NaN
202 5.0   44.0

obj['name']或者obj.name #獲取列
obj.ix['a']    #獲取行
obj['me']='jiu' #創建me列並賦值jiu
del obj['me']   #刪除me列
obj.values 返回二維數組

通過賦值修改值
val=Series(data=['1','9'],index=['a','b'])
obj['name']=val   #修改name列的值

以下參考:

https://www.baidu.com/link?url=dE5VUK9o7HSQe5KVhVo494VjQ2-eLQePcUwCTmB_GqfVdHEVECxmRSzAWqDReBZELdnnjHOVv9w9U3QPoQfhUK&wd=&eqid=f982d1380005e7c7000000035c98793f

https://www.baidu.com/link?url=TlJlGurKXKlp3MoABkKPk4ukLIzxNZqwNgaR4piu3UYvJKmhAo_0gHNC5LkBV6uyPX7SIGCFnWxOYtg8DrvdexA4JDjT9pzHtJg8wWT3htW&wd=&eqid=f982d1380005e7c7000000035c98793f

https://www.baidu.com/link?url=67GjK_9i_7klnCfDGsuyiVXosKhc6E4ZJOPqwQFrEPtldxlSja6A_BMzS0Eu9s_rqGDCzzhFAtD9RAVTAxd6iUHJuciTg05knPWRvS7qZcu&wd=&eqid=f3ee4ff80002dd53000000035c989b4d

pandas.read_csv():讀取csv文件到DataFrame變量中。

pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=None, compact_ints=None, use_unsigned=None, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)[source]

參數詳解:

filepath_or_buffer : 字符串,文件路徑,或者文件句柄,或者字符串IO

字符串可能是一個URL。有效的URL方案包括http、ftp、s3和file。對於文件URL,需要主機名 。例如,本地文件可以是://localhost/path/to/table.csv

sep : 字符串,分割符,默認值爲‘,’

正則表達式中\s匹配任何空白字符,包括空格、製表符、換頁符等等, 等價於[ \f\n\r\t\v]

\f -> 匹配一個換頁
\n -> 匹配一個換行符
\r -> 匹配一個回車符
\t -> 匹配一個製表符
\v -> 匹配一個垂直製表符
而“\s+”則表示匹配任意多個上面的字符。
 

>>> pd.read_csv(temp_path)
 
1\t1.3\t1.4\t2
 
0 as\t3\t4\t5
 
>>> pd.read_csv(temp_path,sep='\s+')
 
1 1.3 1.4 2
 
0 as 3 4 5

delimiter : 同sep,默認值爲 none

delim_whitespace : 布爾,默認值爲 False,表示是否指定使用空格隔離符,(列如: ' '或 '    ') ,等價於 sep=' \s+'.  如果此參數爲True,隔離符參數將不發生效力

header :整數,或整數列表,指定第幾行作爲列名(忽略註解行),默認header=0

header可以是一個整數的列表,如[0,1,3]。未指定的中間行將被刪除)。

列可以是多行,但是[2]或[1]會返回空DataFrame,另外只有單行的列纔可以使用names參數。

In [25]: a = pd.read_csv('t.txt',header=[0,2])
 
In [26]: a     #第一行被刪除
Out[26]:
      d  open     h     l     c
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239
 
In [31]: a = pd.read_csv('t.txt',header=[2])
 
In [32]: a     #只取第2行
Out[32]:
Empty DataFrame
Columns: [dd, oo, hh, ll, cc]
Index: []
 
In [37]: a = pd.read_csv('t.txt',header=2)
                 
In [38]: a      #第2行爲頭,0,1行刪除
Out[38]:
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239
 
In [42]: a = pd.read_csv('t.txt',header=2,names=['date','open','heigh','low','close'])
 
In [43]: a     #第2行爲頭並修改列名
Out[43]:
   date  open heigh   low close
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239

names : 列名數組,當header=None時,將使用 names作爲列名,如果heander指定特定行,則使用names作爲替代

index_col : int or sequence or False, 默認爲None 用列名作爲DataFrame的行標籤。如果在每一行的末尾都有一個帶有分隔符的格式錯誤的文件,那麼可以考慮使用index_col=False來強迫pandas使用默認序列作爲行名稱。

usecols : 默認None,返回列的一個子集。如果是數組,所有元素都必須是位置,或者是與列名稱相對應的字符串,例[0,1,2]或[' foo ', ' bar ', ' baz ']。

as_recarray : 默認False,從版本0.19.0後用read_csv(…).to_records()。將讀入的數據按照numpy array的方式存儲,返回一個NumPy recarray而不是DataFrame。如果設置爲True,由於行索引在這種格式中不可用,所以index_col參數將被忽略。
squeeze : 默認 False,爲True時,返回一個 Series

prefix : str, default None ,當header =None 或者沒有header的時候有效,自動生成的列名編號的前綴,如: ‘X’ for X0, X1, ...

In [11]: b = pd.read_csv('t.txt',prefix='x')
 
In [12]: b       #有header 無效
Out[12]:
     dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239
 
In [13]: b = pd.read_csv('t.txt',header=None,prefix='x')
 
In [14]: b        #無header 有效 生成列名
Out[14]:
     x0    x1    x2    x3    x4
0    dd    oo    hh    ll    cc
1  1226  1240  1245  1237  1241
2  1227  1246  1247  1233  1239

converters : dict, default None,設置指定列的處理函數,可以用"序號"也可以使用“列名”進行列的指定。


In [20]: b=pd.read_csv('t.txt')
 
In [21]: b
Out[21]:
    dd    oo    hh    ll    cc
0  1226  1240  1245  1237  1241
1  1227  1246  1247  1233  1239
 
In [23]: def fun(x):
    ....:     x = int(x) - 1000
    ....:     return x
    ....:
 
 
In [30]: b = pd.read_csv('t.txt',converters={1:fun})
                           #指定行調用fun函數
In [31]: b
Out[31]:
    dd   oo    hh    ll    cc
0  1226  240  1245  1237  1241
1  1227  246  1247  1233  1239
 
 
In [34]: b = pd.read_csv('t.txt',converters={'dd':fun,'ll':fun})
                               #制定列調用fun函數
In [35]: b
Out[35]:
    dd    oo    hh   ll    cc
0  226  1240  1245  237  1241
1  227  1246  1247  233  1239
 
In [36]:

skipinitialspace : boolean, default False,忽略分割符後面的空格

skiprows : list-like or integer or callable, default None,忽略某幾行或者從開始算起的幾行

skipfooter: 忽略文件末尾處的函數,當 engine = 'c' 時此功能無效

nrows : int, default None,從文件中只讀取多少數據行

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