The CURD(增刪查改) operation of DataFrame in python[Create]
注:安裝pandas自行完成:pip install pandas!
一、Create(增加、建立DataFrame)
在pandas裡,DataFrame是最經常用的資料結構,這裡總結一下:
①、把其他格式的資料整理到DataFrame中;
②在已有的DataFrame中插入N列或者N行。
1. 字典型別讀取到DataFrame(dict to DataFrame)
假如我們在做實驗的時候得到的資料是dict型別,為了方便之後的資料統計和計算,我們想把它轉換為DataFrame,存在很多寫法,這裡簡單介紹常用的幾種:
方法一:直接使用 pd.DataFrame(data=test_dict)
即可,括號中的 data=
寫不寫都可以,具體如下:
test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,89,99,78,97,93],'english':[89,94,80,94,94,90]} #[1].直接寫入引數test_dict test_dict_df = pd.DataFrame(test_dict) #[2].字典型賦值 test_dict_df = pd.DataFrame(data=test_dict)
那麼,我們就得到了一個DataFrame,如下:
應該就是這個樣子了。
方法二:使用 from_dict
方法:
test_dict_df = pd.DataFrame.from_dict(test_dict)
結果是一樣的,不再重複貼圖。
其他方法:如果你的dict變數很小,例如 {'id':1,'name':'Alice'}
,你想直接寫到括號裡:
test_dict_df = pd.DataFrame({'id':1,'name':'Alice'}) # wrong style
這樣是不行的,會報錯 ValueError: If using all scalar values, you must pass an index
,是因為如果你提供的是一個標量,必須還得提供一個索引Index,所以你可以這麼寫:
test_dict_df = pd.DataFrame({'id':1,'name':'Alice'},pd.Index(range(1)))
後面的可以寫多個 pd.Index(range(3)
,就會生成三行一樣的,是因為前面的dict型變數只有一組值,如果有多個,後面的Index必須跟前面的資料組數一致,否則會報錯:
pd.DataFrame({'id':[1,2],'name':['Alice','Bob']},pd.Index(range(2)))#must be 2 in range function.
關於選擇列,有些時候我們只需要選擇dict中部分的鍵當做DataFrame的列,那麼我們可以使用columns引數,例如我們只選擇'id','name'列:
test_dict_df = pd.DataFrame(data=test_dict,columns=['id','name']) #only choose 'id' and 'name' columns
這裡就不在多寫了,後續變更顏色新增內容。
2. csv檔案構建DataFrame(csv to DataFrame)
我們實驗的時候資料一般比較大,而csv檔案是文字格式的資料,佔用更少的儲存,所以一般資料來源是csv檔案,從csv檔案中如何構建DataFrame呢? txt檔案一般也能用這種方法。
方法一:最常用的應該就是 pd.read_csv('filename.csv')
了,用 sep
指定資料的分割方式,預設的是 ','
df = pd.read_csv('./xxx.csv')
如果csv中沒有表頭,就要加入 head
引數
3. 在已有的DataFrame中,增加N列或者N行
加入我們已經有了一個DataFrame,如下圖:
3.1 新增列
此時我們又有一門新的課physics,我們需要為每個人新增這門課的分數,按照Index的順序,我們可以使用insert方法,如下:
new_columns = [92,94,89,77,87,91] test_dict_df.insert(2,'pyhsics',new_columns) #test_dict_df.insert(2,'pyhsics',new_columns,allow_duplicates=True)
此時,就得到了新增好的DataFrame,需要注意的是DataFrame預設不允許新增重複的列,但是在insert函式中有引數 allow_duplicates=True
,設定為True後,就可以新增重複的列了,列名也是重複的:
3.2 新增行
此時我們又來了一位新的同學Iric,需要在DataFrame中新增這個同學的資訊,我們可以使用 loc
方法:
new_line = [7,'Iric',99] test_dict_df.loc[6]= new_line
但是十分注意的是,這樣實際是 改 的操作,如果loc[index]中的index已經存在,則新的值會覆蓋之前的值。
當然也可以把這些新的資料構建為一個新的DataFrame,然後兩個DataFrame拼起來。可以用append方法,不過不太會用,提供一種方法:
test_dict_df.append(pd.DataFrame([new_line],columns=['id','name','physics']))
本想一口氣把CURD全寫完,沒想到寫到這裡就好累。。。其他後續新開篇章在寫吧。(在DataFrame中刪除N列或者N行)(在DataFrame中查詢某N列或者某N行)(在DataFrame中修改資料)