खोज…


टिप्पणियों

पांडा के आधिकारिक दस्तावेज में 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
                )


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow