Python數據分析-第6章DataFrame(上)

  • 數據幀相似於二維的關係表,包含一組有序的列,列與列之間的數據類型能夠是不一樣的,可是單個列的數據類型是相同的。
  • 數據幀的每一列或每一行均可以認爲是一個Series。
  • DataFrame中面向行和麪向列的操做基本上是相同的,把行和列稱做軸(axis),DataFrame是按照軸進行操做的,axis=0表示行軸;axis=1 表示列軸。
  • DataFrame對象既有行索引(index),也有列索引(columns),行索引也叫作行標籤,列索引也叫作列標籤/列名。
  • 在DataFrame的構造函數中,columns參數用於設置列索引,index用於設置行索引,都屬於Index類型。Index對象既能夠使用位置(整數)來表示,也能夠使用標籤(字符串)來表示,位置的起始值是0,標籤是經過列表來指定的。

具體屬性和方法能夠參考官方APIhtml

 

1.構造

pandas.DataFrame(data=None, index=None, columns=None)

參數註釋:python

  • data:ndarray、list 或dict
  • index:行索引
  • columns:列名列表
 

1.1.使用字典來建立

經過等長的字典來建立數據幀,並能夠設置數據框的列名和行索引。字典存儲的是每列的數據:數據結構

In [3]:
import pandas as pd
data = {'user':['小王','小李','小明'],'shcool':['清華','北大','科大'],'class':['數學','歷史','計算機']}
df = pd.DataFrame(data)
df
Out[3]:
  user shcool class
0 小王 清華 數學
1 小李 北大 歷史
2 小明 科大 計算機
 

1.2.使用列表(列表項是List)來建立

In [7]:
import pandas as pd
data = [['小王','小李','小明'],['清華','北大','科大'],['數學','歷史','計算機']]
columns = ['user','shcool','class']
df = pd.DataFrame(data,columns=columns)
df
Out[7]:
  0 1 2
0 小王 小李 小明
1 清華 北大 科大
2 數學 歷史 計算機
 

1.3.使用from_dict建立

In [6]:
import pandas as pd
data = {'user':['小王','小李','小明'],'shcool':['清華','北大','科大'],'class':['數學','歷史','計算機']}
df = pd.DataFrame.from_dict(data)
df
Out[6]:
  user shcool class
0 小王 清華 數學
1 小李 北大 歷史
2 小明 科大 計算機
 

2.屬性

 

2.1.索引

In [9]:
import pandas as pd
data = {'user':['小王','小李','小明'],'shcool':['清華','北大','科大'],'class':['數學','歷史','計算機']}
df = pd.DataFrame.from_dict(data)
 
  • 經過index屬性來訪問數據框的行標籤
In [10]:
df.index
Out[10]:
RangeIndex(start=0, stop=3, step=1)
 
  • 經過columns屬性訪問數據框的列標籤
In [11]:
df.columns
Out[11]:
Index(['user', 'shcool', 'class'], dtype='object')
 

2.2.shape

In [12]:
df.shape
Out[12]:
(3, 3)
 

2.3.軸

In [13]:
df.axes
Out[13]:
[RangeIndex(start=0, stop=3, step=1),
 Index(['user', 'shcool', 'class'], dtype='object')]
In [14]:
df.axes[0]
Out[14]:
RangeIndex(start=0, stop=3, step=1)
In [15]:
df.axes[1]
Out[15]:
Index(['user', 'shcool', 'class'], dtype='object')
 

2.4.數據類型

In [16]:
df.dtypes
Out[16]:
user      object
shcool    object
class     object
dtype: object
 

2.5.值

In [18]:
df.values
Out[18]:
array([['小王', '清華', '數學'],
       ['小李', '北大', '歷史'],
       ['小明', '科大', '計算機']], dtype=object)
In [19]:
df.values[0]
Out[19]:
array(['小王', '清華', '數學'], dtype=object)
 

3.列操做和行操做

In [20]:
import pandas as pd
data = {'user':['小王','小李','小明'],'shcool':['清華','北大','科大'],'class':['數學','歷史','計算機']}
df = pd.DataFrame.from_dict(data)
 

3.1.追加列

經過爲一個新列賦值來向數據框中追加新列,新列始終處於列名序列的末尾:app

In [21]:
df['createtime']=['1910','1900','1965']
df
Out[21]:
  user shcool class createtime
0 小王 清華 數學 1910
1 小李 北大 歷史 1900
2 小明 科大 計算機 1965
 

3.2.插入列

要制定新列的位置,須要使用insert()函數,該函數向數據框中插入一列,並制定新列的位置:函數

DataFrame.insert(self, loc, column, value)

參數註釋:spa

  • loc:插入列的位置,該位置索引必須0 <= loc <= len(columns)
  • column:插入列的名稱
  • value:插入列的值,能夠是單個標量值,插入列的值都是相同的;能夠是序列或array-like,爲每一行的列設置一個值。
In [22]:
df.insert(1,'score',[98,99,99.5])
df
Out[22]:
  user score shcool class createtime
0 小王 98.0 清華 數學 1910
1 小李 99.0 北大 歷史 1900
2 小明 99.5 科大 計算機 1965
In [23]:
df.insert(1,'age',22)
df
Out[23]:
  user age score shcool class createtime
0 小王 22 98.0 清華 數學 1910
1 小李 22 99.0 北大 歷史 1900
2 小明 22 99.5 科大 計算機 1965
 

3.3.刪除列或行

使用drop()函數來刪除行或列:code

DataFrame.drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

參數註釋:orm

  • labels 和 axis:labels參數指定要刪除的標籤(一個或者是列表形式的多個),若是axis=0 或 'index',表示行標籤;若是axis=1 或 'columns',表示列標籤。axis的默認值是0。
  • index:設置index 等價於設置 labels 和axis=0;
  • columns:設置columns等價於設置 labels和 axis=1;
In [27]:
df
Out[27]:
  user age1 age score shcool class createtime
0 小王 23 22 98.0 清華 數學 1910
1 小李 23 22 99.0 北大 歷史 1900
2 小明 23 22 99.5 科大 計算機 1965
In [29]:
df.drop(labels=['age1'],axis=1)
Out[29]:
  user age score shcool class createtime
0 小王 22 98.0 清華 數學 1910
1 小李 22 99.0 北大 歷史 1900
2 小明 22 99.5 科大 計算機 1965
 

3.4.追加數據行

向數據框的末尾追加數據行:htm

python|
DataFrame.append(self, other, ignore_index=False, verify_integrity=False, sort=None)

功能說明:向dataframe對象中添加新的行,若是添加的列名不在dataframe對象中,將會被看成新的列進行添加對象

  • other:DataFrame、series、dict、list這樣的數據結構
  • ignore_index:默認值爲False,若是爲True則不使用index標籤
  • verify_integrity :默認值爲False,若是爲True當建立相同的index時會拋出ValueError的異常
  • sort:boolean,默認是None,該屬性在pandas的0.23.0的版本才存在。
In [37]:
import pandas as pd
data = {'user':['小王','小李','小明'],'shcool':['清華','北大','科大'],'class':['數學','歷史','計算機']}
df = pd.DataFrame.from_dict(data)
df
Out[37]:
  user shcool class
0 小王 清華 數學
1 小李 北大 歷史
2 小明 科大 計算機
In [38]:
df.insert(1,'age',22)
df
Out[38]:
  user age shcool class
0 小王 22 清華 數學
1 小李 22 北大 歷史
2 小明 22 科大 計算機
In [39]:
data1 = {'user':['小鄭','大王'],'shcool':['清華','醫大'],'class':['物理','鍼灸']}
df1=df.append(data1,ignore_index=True)
df1
Out[39]:
  user age shcool class
0 小王 22.0 清華 數學
1 小李 22.0 北大 歷史
2 小明 22.0 科大 計算機
3 [小鄭, 大王] NaN [清華, 醫大] [物理, 鍼灸]
In [41]:
data2 = {'user':['小鄭','大王'],'shcool':['清華','醫大'],'class':['物理','鍼灸']}
df2 = pd.DataFrame.from_dict(data2)
df3 = df.append(df2)
df3
Out[41]:
  user age shcool class
0 小王 22.0 清華 數學
1 小李 22.0 北大 歷史
2 小明 22.0 科大 計算機
0 小鄭 NaN 清華 物理
1 大王 NaN 醫大 鍼灸
 

4.列數據類型轉換

astype(dtype)函數用於把數據框的列轉換爲特定的類型,dtype能夠是pandas支持的類型,也能夠是numpy.dtype,也能夠是Python類型:

In [42]:
df.dtypes
Out[42]:
user      object
age        int64
shcool    object
class     object
dtype: object
In [48]:
df['age']=df['age'].astype('float64')
In [49]:
df.dtypes
Out[49]:
user       object
age       float64
shcool     object
class      object
dtype: object

更多文章,請關注:
 

相關文章
相關標籤/搜索