pandas
पंडों IO उपकरण (डेटा सेट को पढ़ना और सहेजना)
खोज…
टिप्पणियों
पांडा के आधिकारिक दस्तावेज में IO Tools पर एक पेज शामिल है जिसमें फाइलों को पढ़ने और लिखने के लिए प्रासंगिक कार्यों की एक सूची है, साथ ही साथ कुछ उदाहरण और सामान्य पैरामीटर भी हैं।
DataFrame में csv फाइल पढ़ना
फ़ाइल data_file.csv
पढ़ने के लिए उदाहरण:
फ़ाइल:
index,header1,header2,header3
1,str_data,12,1.4
3,str_data,22,42.33
4,str_data,2,3.44
2,str_data,43,43.34
7, str_data, 25, 23.32
कोड:
pd.read_csv('data_file.csv')
आउटपुट:
index header1 header2 header3
0 1 str_data 12 1.40
1 3 str_data 22 42.33
2 4 str_data 2 3.44
3 2 str_data 43 43.34
4 7 str_data 25 23.32
कुछ उपयोगी तर्क:
sep
डिफ़ॉल्ट फ़ील्ड सीमांकक एक अल्पविराम है,
उदाहरण के लिए, यदि आपकोpd.read_csv('data_file.csv', sep=';')
लिए किसी भिन्न सीमांकक की आवश्यकता हो तो इस विकल्प का उपयोग करेंpd.read_csv('data_file.csv', sep=';')
index_col
साथindex_col = n
(n
एक पूर्णांक) आप उपयोग स्तंभ के लिए पांडा बताn
सूचकांक को DataFrame। उपरोक्त उदाहरण में:pd.read_csv('data_file.csv', index_col=0)
आउटपुट:
header1 header2 header3 index 1 str_data 12 1.40 3 str_data 22 42.33 4 str_data 2 3.44 2 str_data 43 43.34 7 str_data 25 23.32
skip_blank_lines
डिफ़ॉल्ट रूप से रिक्त लाइनें छोड़ दी जाती हैं। रिक्त लाइनों को शामिल करने के लिएskip_blank_lines=False
का उपयोग करें (वेNaN
मूल्यों से भरे होंगे)pd.read_csv('data_file.csv', index_col=0,skip_blank_lines=False)
आउटपुट:
header1 header2 header3 index 1 str_data 12 1.40 3 str_data 22 42.33 4 str_data 2 3.44 2 str_data 43 43.34 NaN NaN NaN NaN 7 str_data 25 23.32
parse_dates
दिनांक डेटा पार्स करने के लिए इस विकल्प का उपयोग करें।फ़ाइल:
date_begin;date_end;header3;header4;header5 1/1/2017;1/10/2017;str_data;1001;123,45 2/1/2017;2/10/2017;str_data;1001;67,89 3/1/2017;3/10/2017;str_data;1001;0
कॉलम
0
और1
को दिनांक के रूप में पार्स करने के लिए कोड:pd.read_csv('f.csv', sep=';', parse_dates=[0,1])
आउटपुट:
date_begin date_end header3 header4 header5 0 2017-01-01 2017-01-10 str_data 1001 123,45 1 2017-02-01 2017-02-10 str_data 1001 67,89 2 2017-03-01 2017-03-10 str_data 1001 0
डिफ़ॉल्ट रूप से, दिनांक स्वरूप का अनुमान है। यदि आप एक दिनांक प्रारूप निर्दिष्ट करना चाहते हैं जिसका आप उदाहरण के लिए उपयोग कर सकते हैं
dateparse = lambda x: pd.datetime.strptime(x, '%d/%m/%Y') pd.read_csv('f.csv', sep=';',parse_dates=[0,1],date_parser=dateparse)
आउटपुट:
date_begin date_end header3 header4 header5 0 2017-01-01 2017-10-01 str_data 1001 123,45 1 2017-01-02 2017-10-02 str_data 1001 67,89 2 2017-01-03 2017-10-03 str_data 1001 0
फ़ंक्शन के मापदंडों पर अधिक जानकारी आधिकारिक दस्तावेज में पाई जा सकती है।
एक सीएसवी फ़ाइल के लिए बुनियादी बचत
raw_data = {'first_name': ['John', 'Jane', 'Jim'],
'last_name': ['Doe', 'Smith', 'Jones'],
'department': ['Accounting', 'Sales', 'Engineering'],}
df = pd.DataFrame(raw_data,columns=raw_data.keys())
df.to_csv('data_file.csv')
सीएसवी से पढ़ते समय पार्सिंग तिथियां
आप एक कॉलम निर्दिष्ट कर सकते हैं जिसमें दिनांक शामिल हैं ताकि सीएसवी से पढ़ते समय पांडा स्वचालित रूप से उन्हें पार्स कर देंगे
pandas.read_csv('data_file.csv', parse_dates=['date_column'])
DataFrames की हुकुम के लिए स्प्रेडशीट
with pd.ExcelFile('path_to_file.xls) as xl: d = {sheet_name: xl.parse(sheet_name) for sheet_name in xl.sheet_names}
एक विशिष्ट पत्रक पढ़ें
pd.read_excel('path_to_file.xls', sheetname='Sheet1')
वहाँ के लिए कई विकल्प हैं पार्स read_excel
(में विकल्प के समान read_csv
।
pd.read_excel('path_to_file.xls', sheetname='Sheet1', header=[0, 1, 2], skiprows=3, index_col=0) # etc.
परीक्षण पठन_संपर्क
import pandas as pd
import io
temp=u"""index; header1; header2; header3
1; str_data; 12; 1.4
3; str_data; 22; 42.33
4; str_data; 2; 3.44
2; str_data; 43; 43.34
7; str_data; 25; 23.32"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp),
sep = ';',
index_col = 0,
skip_blank_lines = True)
print (df)
header1 header2 header3
index
1 str_data 12 1.40
3 str_data 22 42.33
4 str_data 2 3.44
2 str_data 43 43.34
7 str_data 25 23.32
सूची की समझ
सभी फाइलें फोल्डर files
। सबसे पहले DataFrames की सूची बनाने और उसके बाद concat
उन्हें:
import pandas as pd
import glob
#a.csv
#a,b
#1,2
#5,8
#b.csv
#a,b
#9,6
#6,4
#c.csv
#a,b
#4,3
#7,0
files = glob.glob('files/*.csv')
dfs = [pd.read_csv(fp) for fp in files]
#duplicated index inherited from each Dataframe
df = pd.concat(dfs)
print (df)
a b
0 1 2
1 5 8
0 9 6
1 6 4
0 4 3
1 7 0
#'reseting' index
df = pd.concat(dfs, ignore_index=True)
print (df)
a b
0 1 2
1 5 8
2 9 6
3 6 4
4 4 3
5 7 0
#concat by columns
df1 = pd.concat(dfs, axis=1)
print (df1)
a b a b a b
0 1 2 9 6 4 3
1 5 8 6 4 7 0
#reset column names
df1 = pd.concat(dfs, axis=1, ignore_index=True)
print (df1)
0 1 2 3 4 5
0 1 2 9 6 4 3
1 5 8 6 4 7 0
चंक्स में पढ़ें
import pandas as pd
chunksize = [n]
for chunk in pd.read_csv(filename, chunksize=chunksize):
process(chunk)
delete(chunk)
CSV फ़ाइल में सहेजें
डिफ़ॉल्ट मापदंडों के साथ सहेजें:
df.to_csv(file_name)
विशिष्ट कॉलम लिखें:
df.to_csv(file_name, columns =['col'])
डीफ़ॉल्टॉल्ट सीमांकक ',' - इसे बदलना है:
df.to_csv(file_name,sep="|")
हेडर के बिना लिखें:
df.to_csv(file_name, header=False)
दिए गए हेडर के साथ लिखें:
df.to_csv(file_name, header = ['A','B','C',...]
एक विशिष्ट एन्कोडिंग का उपयोग करने के लिए (जैसे 'utf-8') एन्कोडिंग तर्क का उपयोग करें:
df.to_csv (file_name, एन्कोडिंग = 'utf-8')
Read_csv के साथ दिनांक स्तंभों को पार्स करना
दिनांक में हमेशा एक अलग प्रारूप होता है, उन्हें एक विशिष्ट parse_dates फ़ंक्शन का उपयोग करके पार्स किया जा सकता है।
यह इनपुट .csv :
2016 06 10 20:30:00 foo 2016 07 11 19:45:30 bar 2013 10 12 4:30:00 foo
इस तरह पार्स किया जा सकता है:
mydateparser = lambda x: pd.datetime.strptime(x, "%Y %m %d %H:%M:%S")
df = pd.read_csv("file.csv", sep='\t', names=['date_column', 'other_column'], parse_dates=['date_column'], date_parser=mydateparser)
parse_dates तर्क को पार्स किया जाने वाला स्तंभ है
date_parser पार्सर फ़ंक्शन है
एक ही DF में कई CSV फ़ाइलों को (समान संरचना के साथ) पढ़ें और मर्ज करें
import os
import glob
import pandas as pd
def get_merged_csv(flist, **kwargs):
return pd.concat([pd.read_csv(f, **kwargs) for f in flist], ignore_index=True)
path = 'C:/Users/csvfiles'
fmask = os.path.join(path, '*mask*.csv')
df = get_merged_csv(glob.glob(fmask), index_col=None, usecols=['col1', 'col3'])
print(df.head())
यदि आप CSV फ़ाइलों को क्षैतिज रूप से जोड़ना चाहते हैं (कॉलम जोड़ना), तो pd.concat()
कॉल करते समय axis=1
उपयोग करें:
def merged_csv_horizontally(flist, **kwargs):
return pd.concat([pd.read_csv(f, **kwargs) for f in flist], axis=1)
हेडर पंक्ति नहीं होने पर पंडों के डेटा फ्रेम में cvs फ़ाइल पढ़ना
यदि फ़ाइल में शीर्ष लेख पंक्ति नहीं है,
फ़ाइल:
1;str_data;12;1.4
3;str_data;22;42.33
4;str_data;2;3.44
2;str_data;43;43.34
7; str_data; 25; 23.32
आप कॉलम नाम प्रदान करने के लिए कीवर्ड names
का उपयोग कर सकते हैं:
df = pandas.read_csv('data_file.csv', sep=';', index_col=0,
skip_blank_lines=True, names=['a', 'b', 'c'])
df
Out:
a b c
1 str_data 12 1.40
3 str_data 22 42.33
4 str_data 2 3.44
2 str_data 43 43.34
7 str_data 25 23.32
HDFStore का उपयोग करना
import string
import numpy as np
import pandas as pd
विभिन्न dtypes के साथ नमूना DF उत्पन्न करें
df = pd.DataFrame({
'int32': np.random.randint(0, 10**6, 10),
'int64': np.random.randint(10**7, 10**9, 10).astype(np.int64)*10,
'float': np.random.rand(10),
'string': np.random.choice([c*10 for c in string.ascii_uppercase], 10),
})
In [71]: df
Out[71]:
float int32 int64 string
0 0.649978 848354 5269162190 DDDDDDDDDD
1 0.346963 490266 6897476700 OOOOOOOOOO
2 0.035069 756373 6711566750 ZZZZZZZZZZ
3 0.066692 957474 9085243570 FFFFFFFFFF
4 0.679182 665894 3750794810 MMMMMMMMMM
5 0.861914 630527 6567684430 TTTTTTTTTT
6 0.697691 825704 8005182860 FFFFFFFFFF
7 0.474501 942131 4099797720 QQQQQQQQQQ
8 0.645817 951055 8065980030 VVVVVVVVVV
9 0.083500 349709 7417288920 EEEEEEEEEE
एक बड़ा DF बनाओ (10 * 100.000 = 1.000.000 पंक्तियाँ)
df = pd.concat([df] * 10**5, ignore_index=True)
HDFStore फ़ाइल बनाएँ (या मौजूदा खोलें)
store = pd.HDFStore('d:/temp/example.h5')
हमारे डेटा फ्रेम को h5
(HDFStore) फ़ाइल में सहेजें, अनुक्रमण [int32, int64, string] कॉलम:
store.append('store_key', df, data_columns=['int32','int64','string'])
शो HDFStore विवरण
In [78]: store.get_storer('store_key').table
Out[78]:
/store_key/table (Table(10,)) ''
description := {
"index": Int64Col(shape=(), dflt=0, pos=0),
"values_block_0": Float64Col(shape=(1,), dflt=0.0, pos=1),
"int32": Int32Col(shape=(), dflt=0, pos=2),
"int64": Int64Col(shape=(), dflt=0, pos=3),
"string": StringCol(itemsize=10, shape=(), dflt=b'', pos=4)}
byteorder := 'little'
chunkshape := (1724,)
autoindex := True
colindexes := {
"index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"int32": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"string": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"int64": Index(6, medium, shuffle, zlib(1)).is_csi=False}
अनुक्रमित कॉलम दिखाएं
In [80]: store.get_storer('store_key').table.colindexes
Out[80]:
{
"int32": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"string": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"int64": Index(6, medium, shuffle, zlib(1)).is_csi=False}
बंद (डिस्क को फ्लश) हमारी दुकान फ़ाइल
store.close()
पढ़ें नग्नेक्स एक्सेस लॉग (कई उद्धरण)
कई quotechars के लिए sep के स्थान पर regex का उपयोग करें:
df = pd.read_csv(log_file,
sep=r'\s(?=(?:[^"]*"[^"]*")*[^"]*$)(?![^\[]*\])',
engine='python',
usecols=[0, 3, 4, 5, 6, 7, 8],
names=['ip', 'time', 'request', 'status', 'size', 'referer', 'user_agent'],
na_values='-',
header=None
)