Pandas中的數據加載、存儲與解析
1.讀取csv文件
導入模塊
from pandas import Series,DataFrame
import pandas as pd
import numpy as np
from numpy import nan as NA
import sys
用read_csv讀取csv文件
pd.read_csv("data/ex1.csv")
打印結果:
用read_table讀取csv文件
pd.read_table("data/ex1.csv")
打印結果:
用read_table讀取csv文件,指定分隔符
pd.read_table("data/ex1.csv",sep=",")
打印結果:
#讀取的csv文件沒有表頭時,默認會把第一行數據分配爲表頭
pd.read_csv("data/ex2.csv")
打印結果:
#讀取的csv文件沒有表頭時,默認會分配表頭索引
pd.read_csv("data/ex2.csv",header=None)
打印結果:
#手動指定標題數據
pd.read_csv("data/ex2.csv",names=["a","b","c","d","message"])
打印結果:
#爲加載的數據指定行索引,用某一列的數據作爲行索引
pd.read_csv("data/ex2.csv",names=["a","b","c","d","message"],index_col="message")
打印結果:
pd.read_csv("data/csv_mindex.csv")
打印結果:
#將讀取的數據進行層次化索引
pd.read_csv("data/csv_mindex.csv",index_col=["key1","key2"])
打印結果:
#將讀取的數據進行層次化索引
pd.read_csv("data/csv_mindex.csv",index_col=["key2","key1"])
打印結果:
2.讀取txt文件
#讀取文本文件
open("data/ex3.txt")
list(open("data/ex3.txt"))
#打印結果:
[' A B C\n',
'aaa -0.264438 -1.026059 -0.619500\n',
'bbb 0.927272 0.302904 -0.032399\n',
'ccc -0.264273 -0.386314 -0.217601\n',
'ddd -0.871858 -0.348382 1.100491\n']
pd.read_table("data/ex3.txt",sep="\s+") #多個非空字符
打印結果:
#通過skiprows參數指定跳過行索引
pd.read_csv("data/ex4.csv",skiprows=[0,2,3])
打印結果:
#加載存在NA的數據文件,na_values將空值轉換爲“NUL”。
pd.read_csv("data/ex5.csv",na_values=['NULL'])
打印結果:
sentinels = {"message":["foo","NA"],"something":["two"]}
pd.read_csv("data/ex5.csv",na_values=sentinels) #把sentinels裏指定的值替換爲NaN
打印結果:
3.寫入csv文件
#用pandas將數據寫入到csv文件中
df = DataFrame(np.random.randn(4,3),columns=["a","b","c"],index=["one","two","three","four"])
df
打印結果:
df.to_csv("data/mydata1.csv")
#將數據直接輸出到控制檯
df.to_csv(sys.stdout,sep="|")
#打印結果:
|a|b|c
one|0.21522295805912317|0.8563225518233668|0.042847270561624705
two|1.1913785656962268|-0.08198281210776473|-0.6992421650032926
three|-0.06422094382860605|-1.0330910597067728|0.7897464201161191
four|-1.38860351562487|-1.1094144133483024|-0.001512810105137558
#將數據寫入到csv文件,指定分隔符
df.to_csv("data/mydata2.csv",sep="|")
data = pd.read_csv("data/ex5.csv")
data
打印結果:
#爲數據集中的NaN值做標記
data.to_csv(sys.stdout,na_rep="NULL")
#打印結果:
,something,a,b,c,d,message
0,one,1,2,3.0,4,NULL
1,two,5,6,NULL,8,world
2,three,9,10,11.0,12,foo
#pandas只寫入數據,不寫入行和列的索引
data.to_csv(sys.stdout,index=False,header=False)
#打印結果:
one,1,2,3.0,4,
two,5,6,,8,world
three,9,10,11.0,12,foo
#通過columns指定需要寫入到文件中的列
data.to_csv(sys.stdout,index=False,columns=['a','b','c'])
#打印結果:
a,b,c
1,2,3.0
5,6,
9,10,11.0