csv文件的讀取與存儲

通常我們獲取到的股票交易數(shù)據(jù)會以 CSV 格式文件存儲在本地,不僅僅是因為 CSV 格式文件在量化領(lǐng)域中比較常用,最主要的是作為一種文本文件,它可以非常容易地被導(dǎo)入到各種表格類型的軟件以及數(shù)據(jù)庫中。如果要用 Pandas 庫中的各種方法對這些數(shù)據(jù)進(jìn)行處理和分析的話,勢必要將 CSV 文件格式中的數(shù)據(jù)轉(zhuǎn)換為 Pandas 支持的格式數(shù)據(jù)。 Series 是一維的數(shù)據(jù)對象,DataFrame 是二維的數(shù)據(jù)對象,股票的數(shù)據(jù)內(nèi)容包括了日期、收盤價、開盤價等信息內(nèi)容,很顯然我們要將股票數(shù)據(jù)轉(zhuǎn)換為二維的 DataFrame 數(shù)據(jù)對象。對應(yīng)的 DataFrame 格式的股票交易數(shù)據(jù),我們也需要以 CSV 文件格式另存在本地。

Pandas庫提供了用于將表格型數(shù)據(jù)讀取為DataFrame對象的方法,其中read_csv可支持從文件、URL、文件型對象中加載帶分隔符(默認(rèn)為逗號)的數(shù)據(jù),同時也可以通過to_csv方法將DataFrame數(shù)據(jù)以逗號分隔方式存儲于CSV格式文件中。本小節(jié)重點(diǎn)介紹下Pandas庫中導(dǎo)入CSV格式文件和存儲CSV格式文件的方法。

加載CSV文件

首先從同花順網(wǎng)站導(dǎo)出csv文件,

接下來我們再來深究下read_csv方法不同選項參數(shù)對應(yīng)的效果。方法的參數(shù)有很多,這里主要介紹幾個常用參數(shù)的用法,其余參數(shù)的用法可以參考官方文檔 https://docs.python.org/3/library/csv.html#module-csv

header
參數(shù)指定數(shù)據(jù)開始的行數(shù)作為列名。如果文件中沒有指定列索引,則默認(rèn)header=0,表示文件第0行為列索引。如果header=1,表示文件第1行作為列索引。如果header=None則表明文件數(shù)據(jù)沒有列索引。除非你給定列索引的名字,否則read_csv會自動加上列索引。

import pandas as pd

# 參數(shù)header=1
df_csv_load  = pd.read_csv('C:\\app\\pycharm\\projects\\myenv\\CSV_load\\table.csv', header=1, parse_dates=True, index_col=0, encoding='gb2312')

print(df_csv_load)
image.png

index_col 參數(shù)指定數(shù)據(jù)中哪一列作為Dataframe的行索引,比如前面例子中 index_col=0指定了第0列作為Dataframe的行索引。如果index_col=None,表明文件數(shù)據(jù)沒有行索引時,read_csv會自動加上行索引(從0開始的整數(shù))。index_col也可以指定多列作為Dataframe的行索引,形成層次索引,比如指定第0列和第1列作為Dataframe的行索引index_col=[0,1] 。
parse_dates參數(shù)可以為boolean形式值或者列表形式的值。這里我們采用boolean形式值,parse_dates=True,指把行索引字符串解析成時間格式。我們打印index可以看到,當(dāng)parse_dates=False時行索引時間這一列數(shù)據(jù)類型dtype為object,代表了字符串類型,parse_dates=True時打印index可以看到,行索引時間這一列數(shù)據(jù)類型dtype為datatime時間格式,這樣后續(xù)數(shù)據(jù)處理以及繪制圖形時會比較便捷。

#參數(shù)parse_dates=False
df_csvload  = pd.read_csv('C:\\app\\pycharm\\projects\\myenv\\CSV_load\\table.csv',parse_dates=False,index_col=0,encoding='gb2312')
#參數(shù)parse_dates=True打印索引信息
DatetimeIndex(['2018-01-03', '2018-01-04', '2018-01-05', '2018-01-08',
               '2018-01-09', '2018-01-10', '2018-01-11', '2018-01-12',
               '2018-01-15', '2018-01-16', '2018-01-17', '2018-01-18',
               '2018-01-19', '2018-01-22', '2018-01-23', '2018-01-24',
               '2018-01-25', '2018-01-26', '2018-01-29', '2018-01-30',
               '2018-01-31'],
              dtype='datetime64[ns]', name='2018/1/2', freq=None)
#參數(shù)parse_dates=False打印索引信息
Index(['2018/1/2', '2018/1/3', '2018/1/4', '2018/1/5', '2018/1/8', '2018/1/9',
       '2018/1/10', '2018/1/11', '2018/1/12', '2018/1/15', '2018/1/16',
       '2018/1/17', '2018/1/18', '2018/1/19', '2018/1/22', '2018/1/23',
       '2018/1/24', '2018/1/25', '2018/1/26', '2018/1/29', '2018/1/30',
       '2018/1/31'],
      dtype='object', name='Date')

encoding用于指定unicode文本編碼的格式。我們知道字符串在Python內(nèi)部的表示是unicode編碼,因此在進(jìn)行編碼轉(zhuǎn)換時,通常需要以unicode作為中間編碼,先將其他編碼的字符串解碼decode成unicode,再從unicode編碼encode成另一種編碼)。此處編碼格式為'gb2312',如果格式不對應(yīng)的話控制臺會將中文解析為亂碼。

  1. 存儲CSV文件
    用read_csv方法讀取CSV文件的數(shù)據(jù)并轉(zhuǎn)換為DataFrame格式的數(shù)據(jù)后,接下來我們對這些DataFrame數(shù)據(jù)進(jìn)行擴(kuò)充,用to_csv方法另存為CSV文件。這里就擴(kuò)充2個交易日的股票數(shù)據(jù),并合并至從table.csv文件中加載獲取的DataFrame數(shù)據(jù)中。df_csv_load是我們創(chuàng)建的DataFrame對象,支持to_csv這個方法。括號中第一個參數(shù)為存儲路徑,columns和index分別指定寫入列索引和行索引內(nèi)容。
import datetime
import pandas as pd

# 獲取數(shù)據(jù)
df_csv_load = pd.read_csv('C:\\app\\pycharm\\projects\\myenv\\CSV_load\\table.csv', header=1, parse_dates=True, index_col=0, encoding='gb2312')

# 擴(kuò)充2個交易日的股票數(shù)據(jù)
df_add_dat = pd.DataFrame([{u'Open':1.1, u'High':1.2, u'Low':1.3, u'Close':1.4}, {u'Open':2.1, u'High':2.2, u'Low':2.3, u'Close':2.4}],index=[datetime.datetime.strptime("2016-06-25 00:00:00", "%Y-%m-%d %H:%M:%S"),datetime.datetime.strptime("2016-06-26 00:00:00", "%Y-%m-%d %H:%M:%S")])
df_csv_load = df_csv_load.append(df_add_dat)

#存儲csv文件數(shù)據(jù)
df_csv_load.to_csv('C:\\app\\pycharm\\projects\\myenv\\CSV_load\\table-add.csv', columns=df_csv_load.columns, index=True)


print(df_csv_load)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容