日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python:pandas之read_csv

發布時間:2025/3/20 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python:pandas之read_csv 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導入必要的包

import pandas as pd import numpy as np from pandas.api.types import CategoricalDtype from io import StringIO

dtype:

指定整個DataFrame的數據類型或用字典的方式指定各個列的數據類型

data = pd.read_csv('diamonds.csv',dtype=object) data.head()out: carat cut color clarity depth table price x y z 0 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 1 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 2 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 3 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63 4 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75data.dtypesout: carat object cut object color object clarity object depth object table object price object x object y object z object dtype: objectdata = pd.read_csv('diamonds.csv',dtype={'carat': np.float64,'depth': np.float64,'table':np.float64}) data.dtypes out: carat float64 cut object color object clarity object depth float64 table float64 price int64 x float64 y float64 z float64 dtype: object

可以通過指定dtype ='category’或dtype = CategoricalDtype(類別,有序)直接解析類別列。

data = pd.read_csv('diamonds.csv',dtype='category') data.dtypesout: carat category cut category color category clarity category depth category table category price category x category y category z category dtype: object

可以使用dict指定將某列為Category類型:

data = pd.read_csv('diamonds.csv',dtype={'cut':'category'}) data.dtypesout: carat float64 cut category color object clarity object depth float64 table float64 price int64 x float64 y float64 z float64 dtype: object data.cut.value_counts()out: Ideal 21551 Premium 13791 Very Good 12082 Good 4906 Fair 1610 Name: cut, dtype: int64

指定dtype ='category’將導致無序分類,其類別是數據中觀察到的唯一值。

要更好地控制類別和順序,可以創建CategoricalDtype,然后將其傳遞給該列的dtype。

from pandas.api.types import CategoricalDtype dtype = CategoricalDtype(['Ideal','Premium','Very Good','Good','Fair'],ordered=True) data = pd.read_csv('diamonds.csv',dtype={'cut':dtype}) data.dtypesout: carat float64 cut category color object clarity object depth float64 table float64 price int64 x float64 y float64 z float64 dtype: object

使用dtype = CategoricalDtype時,dtype.categories之外的“意外”值將被視為缺失值。

from pandas.api.types import CategoricalDtype dtype = CategoricalDtype(['Ideal','Premium','Very Good','Good'],ordered=True) data = pd.read_csv('diamonds.csv',dtype={'cut':dtype}) data[data.cut.isnull()].head()out:carat cut color clarity depth table price x y z 8 0.22 NaN E VS2 65.1 61.0 337 3.87 3.78 2.49 91 0.86 NaN E SI2 55.1 69.0 2757 6.45 6.33 3.52 97 0.96 NaN F SI2 66.3 62.0 2759 6.27 5.95 4.07 123 0.70 NaN F VS2 64.5 57.0 2762 5.57 5.53 3.58 124 0.70 NaN F VS2 65.3 55.0 2762 5.63 5.58 3.66

header:

文件可能包含標題行,也可能沒有標題行。 pandas假定第一行應用作列名:

from io import StringIO data = ('a,b,c\n''1,2,3\n''4,5,6\n''7,8,9') pd.read_csv(StringIO(data))out:a b c 0 1 2 3 1 4 5 6 2 7 8 9

通過指定name與header,可以重命名列以及是否丟棄標題行:

pd.read_csv(StringIO(data),names=['foo','bar','baz'],header=0)out:foo bar baz 0 1 2 3 1 4 5 6 2 7 8 9

通過指定name與header,可以重命名列以及是否丟棄標題行:

pd.read_csv(StringIO(data),names=['foo','bar','baz'],header=0)out:foo bar baz 0 1 2 3 1 4 5 6 2 7 8 9 pd.read_csv(StringIO(data),names=['foo','bar','baz'],header=None)out:foo bar baz 0 a b c 1 1 2 3 2 4 5 6 3 7 8 9

如果標題不在第一行中,則將行號傳遞給標題,將跳過header前面的行:

data = ('skip this skip it\n''a,b,c\n''1,2,3\n''4,5,6\n''7,8,9') pd.read_csv(StringIO(data),header=1)out:a b c 0 1 2 3 1 4 5 6 2 7 8 9 Duplicate Names Parsing

usecols:

使用列名,位置號或可調用的方法選擇文件中列的任何子集.

data = 'a,b,c,d\n1,2,3,foo\n4,5,6,bar\n7,8,9,baz' pd.read_csv(StringIO(data))out:a b c d 0 1 2 3 foo 1 4 5 6 bar 2 7 8 9 baz pd.read_csv(StringIO(data),usecols=['b','d'])out:b d 0 2 foo 1 5 bar 2 8 baz pd.read_csv(StringIO(data),usecols=[0,1,3])out:a b d 0 1 2 foo 1 4 5 bar 2 7 8 baz pd.read_csv(StringIO(data),usecols=lambda x: x.upper() in ['A','C'])out:a c 0 1 3 1 4 6 2 7 9

index_col:

data = ('a,b,c\n''4,apple,bat,5.7\n''8,orange,cow,10') pd.read_csv(StringIO(data))out:a b c 4 apple bat 5.7 8 orange cow 10.0 pd.read_csv(StringIO(data),index_col=0)out:a b c 4 apple bat 5.7 8 orange cow 10.0 data = ('a,b,c\n''4,apple,bat\n''8,orange,cow') pd.read_csv(StringIO(data))out:a b c 0 4 apple bat 1 8 orange cow pd.read_csv(StringIO(data),index_col=0)out:b c a 4 apple bat 8 orange cow pd.read_csv(StringIO(data),usecols=['b','c'],index_col=0)out:c b apple bat orange cow

parse_dates和date_parser:

為了更好地使用日期時間數據,read_csv()使用關鍵字參數parse_dates和date_parser允許用戶指定列的日期/時間格式,將string轉換為日期時間對象。

foo = ('date,A,B,C\n''2009-01-01,a,1,2\n''2009-01-02,b,3,4\n''2009-01-03,c,4,5\n') pd.read_csv(StringIO(foo),index_col=0,parse_dates=True)out:A B C date 2009-01-01 a 1 2 2009-01-02 b 3 4 2009-01-03 c 4 5 pd.read_csv(StringIO(foo),index_col=0,parse_dates=True).index DatetimeIndex(['2009-01-01', '2009-01-02', '2009-01-03'], dtype='datetime64[ns]', name='date', freq=None)

通常,我們可能希望分別存儲日期和時間數據,或分別存儲各種日期字段。 parse_dates關鍵字可用于指定列的組合,以從中解析日期和/或時間。 您可以指定要parse_dates的列或嵌套列表,結果日期列將被添加到輸出的前面(以便不影響現有的列順序),新的列名為各列Name的連接。

tmp = ('KORD,19990127, 19:00:00, 18:56:00, 0.8100\n''KORD,19990127, 20:00:00, 19:56:00, 0.0100\n''KORD,19990127, 21:00:00, 20:56:00, -0.5900\n''KORD,19990127, 21:00:00, 21:18:00, -0.9900\n''KORD,19990127, 22:00:00, 21:56:00, -0.5900\n''KORD,19990127, 23:00:00, 22:56:00, -0.5900') pd.read_csv(StringIO(tmp),header=None,parse_dates=[[1,2],[1,3]])out:1_2 1_3 0 4 0 1999-01-27 19:00:00 1999-01-27 18:56:00 KORD 0.81 1 1999-01-27 20:00:00 1999-01-27 19:56:00 KORD 0.01 2 1999-01-27 21:00:00 1999-01-27 20:56:00 KORD -0.59 3 1999-01-27 21:00:00 1999-01-27 21:18:00 KORD -0.99 4 1999-01-27 22:00:00 1999-01-27 21:56:00 KORD -0.59 5 1999-01-27 23:00:00 1999-01-27 22:56:00 KORD -0.59

默認情況下,解析器會刪除組件日期列,可以選擇通過keep_date_col關鍵字保留它們:

pd.read_csv(StringIO(tmp),header=None,parse_dates=[[1,2],[1,3]],keep_date_col=True)out:1_2 1_3 0 1 2 3 4 0 1999-01-27 19:00:00 1999-01-27 18:56:00 KORD 19990127 19:00:00 18:56:00 0.81 1 1999-01-27 20:00:00 1999-01-27 19:56:00 KORD 19990127 20:00:00 19:56:00 0.01 2 1999-01-27 21:00:00 1999-01-27 20:56:00 KORD 19990127 21:00:00 20:56:00 -0.59 3 1999-01-27 21:00:00 1999-01-27 21:18:00 KORD 19990127 21:00:00 21:18:00 -0.99 4 1999-01-27 22:00:00 1999-01-27 21:56:00 KORD 19990127 22:00:00 21:56:00 -0.59 5 1999-01-27 23:00:00 1999-01-27 22:56:00 KORD 19990127 23:00:00 22:56:00 -0.59

請注意,如果您希望將多個列合并為一個日期列,則必須使用嵌套列表。 換句話說,parse_dates = [1,2]表示第二和第三列應分別解析為單獨的日期列,而parse_dates = [[1,2]]意味著應將這兩列解析為單個列。

還可以使用字典來指定自定義名稱列:

date_spec = {'nominal':[1,2],'actual':[1,3]} pd.read_csv(StringIO(tmp),header=None,parse_dates=date_spec)out:nominal actual 0 4 0 1999-01-27 19:00:00 1999-01-27 18:56:00 KORD 0.81 1 1999-01-27 20:00:00 1999-01-27 19:56:00 KORD 0.01 2 1999-01-27 21:00:00 1999-01-27 20:56:00 KORD -0.59 3 1999-01-27 21:00:00 1999-01-27 21:18:00 KORD -0.99 4 1999-01-27 22:00:00 1999-01-27 21:56:00 KORD -0.59 5 1999-01-27 23:00:00 1999-01-27 22:56:00 KORD -0.59

重要的是要記住,如果要將多個文本列解析為單個日期列,則在數據前添加一個新列。
index_col參數基于這組新列而不是原始數據列:

pd.read_csv(StringIO(tmp),header=None,parse_dates=date_spec,index_col=0)out:actual 0 4 nominal 1999-01-27 19:00:00 1999-01-27 18:56:00 KORD 0.81 1999-01-27 20:00:00 1999-01-27 19:56:00 KORD 0.01 1999-01-27 21:00:00 1999-01-27 20:56:00 KORD -0.59 1999-01-27 21:00:00 1999-01-27 21:18:00 KORD -0.99 1999-01-27 22:00:00 1999-01-27 21:56:00 KORD -0.59 1999-01-27 23:00:00 1999-01-27 22:56:00 KORD -0.59

注意:如果列或索引包含不可解析的日期,則整個列或索引將作為對象數據類型原樣返回。 對于非標準日期時間解析,請在pd.read_csv之后使用to_datetime()。

注意:read_csv具有用于解析iso8601格式的日期時間字符串的fast_path,例如“ 2000-01-01T00:01:02 + 00:00”和類似的變體。 如果可以安排數據以這種格式存儲日期時間,則加載時間將明顯縮短,約20倍。

最后,解析器允許您指定自定義date_parser函數,以充分利用日期解析API的靈活性:

pd.read_csv(StringIO(tmp),header=None,parse_dates=date_spec,date_parser=pd.io.date_converters.parse_date_time)out:nominal actual 0 4 0 1999-01-27 19:00:00 1999-01-27 18:56:00 KORD 0.81 1 1999-01-27 20:00:00 1999-01-27 19:56:00 KORD 0.01 2 1999-01-27 21:00:00 1999-01-27 20:56:00 KORD -0.59 3 1999-01-27 21:00:00 1999-01-27 21:18:00 KORD -0.99 4 1999-01-27 22:00:00 1999-01-27 21:56:00 KORD -0.59 5 1999-01-27 23:00:00 1999-01-27 22:56:00 KORD -0.59

skiprows

可以選擇忽略前面的行數,通過下圖可以對比使用skiprows前后的shape。

na_values

可以用來替換NA值

nrows

從文件開始時選取需要讀取的行數。可以看到使用nrows=3之后,數據只有前三行。(df.head()默認讀取前五行)

skipfooter

參考:
Python Pandas——Read_csv詳解
【Python3】pandas.read_csv詳解

總結

以上是生活随笔為你收集整理的python:pandas之read_csv的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。