【Python】DataFrame系列1之創建方法和其他數據類型list\array之間的轉換

        Python中最常用的數據形式莫過於DataFrame了,基本上每次使用多多少少都要百度一下,終於想起了寫一個DataFrame的系列文章,把DataFrame使用過的一些方法做一個系列文章,方便以後的查閱,也做一個分享。這篇博文主要介紹,DataFrame的創建方式。

目錄

1.read_csv()方法

2.read_table()方法 

3.read_excel()方法

4.dict和dataframe相互轉換

4.1dict轉爲dataframe

4.2dataframe轉爲dict

5.list和dataframe相互轉換

5.1簡單列表轉換

5.2雙列表轉換

5.3包含不同子列表的列表轉換

5.4轉換之後,列重命名

5.5dataframe轉換爲list

6.array和dataframe相互轉換

6.1dataframe轉化成array

6.2array轉化成dataframe 

 

1.read_csv()方法

Pandas的read方法,屬於一大類,大家有興趣可以研究一下,這裏只寫一些簡單的讀取方式。

read_csv()這個方法是最常用的,一般我們都會把csv、txt數據讀取到dataframe中,看下用法:

sep表示分隔符,一般情況下csv文件用逗號分隔,txt文件用table鍵分隔,不過具體情況要看文件的存儲方式,也有可能csv文件用的是table鍵存儲的,如果遇到讀取出的dataframe都擠在一列,最大的可能就是分隔符沒有用對。

header代表要不要列名,這裏選擇要。

#讀取csv文件
df1=pd.read_csv('.../train.csv', sep=',', header='infer')
#讀取txt文件
df2=pd.read_csv('.../dict.txt', sep='\t', header='infer')

看下結果:

 

 

2.read_table()方法 

read_table和read_csv用法基本一致,如下:

#讀取csv文件
df1=pd.read_table('.../train.csv', sep=',', header='infer')
#讀取txt文件
df2=pd.read_table('.../dict.txt', sep='\t', header='infer')

3.read_excel()方法

該方法主要用來讀取Excel 文件或 xlrd 工作簿

df2=pd.read_excel('.../bund.xlsx', sep='\t', header='infer')

4.dict和dataframe相互轉換

4.1dict轉爲dataframe

dicts = {'name':['張三','李四','王窪'],'age':[20,30,25]}

#直接寫入參數
df1 = pd.DataFrame(dicts)
#字典型賦值
df2 = pd.DataFrame(data=dicts)
#from_dict 寫入參數
df3 = pd.DataFrame.from_dict(dicts)
#from_dict字典型賦值
df4 = pd.DataFrame.from_dict(data=dicts)

結果是一樣的:

 

這裏要注意:不能傳入只有一個的情況,看下下面案例:

 這裏會報錯,說需要一個index,這是因爲,提供的是一個標量,必須還得提供一個索引Index

pd.DataFrame({'name':'張三','age':20})

#報錯
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3325, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-76-4a950dcef3db>", line 1, in <module>
    pd.DataFrame({'name':'張三','age':20})
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 392, in __init__
    mgr = init_dict(data, index, columns, dtype=dtype)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\construction.py", line 212, in init_dict
    return arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\construction.py", line 51, in arrays_to_mgr
    index = extract_index(arrays)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\construction.py", line 308, in extract_index
    raise ValueError('If using all scalar values, you must pass'
ValueError: If using all scalar values, you must pass an index

正確方式:

pd.DataFrame({'name':'張三','age':20},pd.Index(range(1)))

 結果爲:

4.2dataframe轉爲dict

data:
    a   b   c   d
0  11  21  31  41
1  12  22  32  42

dict_data2= data.to_dict('list')
Out[102]: {'b': [21, 22], 'c': [31, 32], 'd': [41, 42]}

5.list和dataframe相互轉換

5.1簡單列表轉換

#簡單列表轉換
a=[11,22,32,44]
data=pd.DataFrame(a)
#結果:
    0
0  11
1  22
2  32
3  44

5.2雙列表轉換

a=[11,21,31,41]
b=[12,22,32,42]
c={"a" : a,
   "b" : b}#將列表a,b轉換成字典
data=pd.DataFrame(c)#將字典轉換成爲數據框

Out[83]: 
    a   b
0  11  12
1  21  22
2  31  32
3  41  42

5.3包含不同子列表的列表轉換

a=[[11,21,31,41],[12,22,32,42]]
data=pd.DataFrame(a)


Out[85]: 
    0   1   2   3
0  11  21  31  41
1  12  22  32  42

5.4轉換之後,列重命名

data.rename(columns={0:'a',1:'b',2:'c',3:'d'},inplace=True)

Out[87]: 
    a   b   c   d
0  11  21  31  41
1  12  22  32  42

5.5dataframe轉換爲list

#將一列轉爲list-方法一
data['a'].values.tolist()
Out[95]: [11, 12]

#將一列轉爲list-方法二
data['a'].tolist()
Out[96]: [11, 12]

#將一列轉爲list且去除重複數據-方法一
data['a'].drop_duplicates().values.tolist()
Out[97]: [11, 12]
#將一列轉爲list且去除重複數據-方法二
list(set(data['a']))
Out[98]: [11, 12]

#將dataframe整體轉爲list
data.values.tolist()
Out[99]: [[11, 21, 31, 41], [12, 22, 32, 42]]

6.array和dataframe相互轉換

這裏把兩個互相轉換的方法都列舉一下~

6.1dataframe轉化成array

df=data.values

Out[89]: 
array([[11, 21, 31, 41],
       [12, 22, 32, 42]], dtype=int64)

6.2array轉化成dataframe 

data = pd.DataFrame(df)
Out[91]: 
    0   1   2   3
0  11  21  31  41
1  12  22  32  42

以上,是我經常使用的一些方法,歡迎大家補充~

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