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列的值
以下參考:
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,從文件中只讀取多少數據行