Python中最常用的數據形式莫過於DataFrame了,基本上每次使用多多少少都要百度一下,終於想起了寫一個DataFrame的系列文章,把DataFrame使用過的一些方法做一個系列文章,方便以後的查閱,也做一個分享。這篇博文主要介紹,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
以上,是我經常使用的一些方法,歡迎大家補充~