CSV फ़ाइल को पांडा डेटा के रूप में आयात करें


90

एक पांडा डेटाफ़्रेम में एक सीएसवी फ़ाइल में पढ़ने के लिए पायथन तरीका क्या है (जिसे मैं तब सांख्यिकीय संचालन के लिए उपयोग कर सकता हूं, अलग-अलग टाइप किए गए कॉलम आदि हो सकते हैं)?

मेरी CSV फ़ाइल "value.txt"में निम्नलिखित सामग्री है:

Date,"price","factor_1","factor_2"
2012-06-11,1600.20,1.255,1.548
2012-06-12,1610.02,1.258,1.554
2012-06-13,1618.07,1.249,1.552
2012-06-14,1624.40,1.253,1.556
2012-06-15,1626.15,1.258,1.552
2012-06-16,1626.15,1.263,1.558
2012-06-17,1626.15,1.264,1.572

R में हम इस फाइल को पढ़ने में प्रयोग करेंगे:

price <- read.csv("value.txt")  

और वह एक आर डेटा वापस आएगा।

> price <- read.csv("value.txt")
> price
     Date   price factor_1 factor_2
1  2012-06-11 1600.20    1.255    1.548
2  2012-06-12 1610.02    1.258    1.554
3  2012-06-13 1618.07    1.249    1.552
4  2012-06-14 1624.40    1.253    1.556
5  2012-06-15 1626.15    1.258    1.552
6  2012-06-16 1626.15    1.263    1.558
7  2012-06-17 1626.15    1.264    1.572

क्या समान कार्यक्षमता प्राप्त करने के लिए एक पायथोनिक तरीका है?


क्या आप इस बात पर प्रशंसा करेंगे कि डेटाफ्रेम क्या है और आप इसके साथ क्या सांख्यिकीय ऑपरेशन कर सकते हैं?
LWZ

3
डेटाफ्रेम में एक से अधिक प्रकार के डेटा शामिल हो सकते हैं, उदाहरण के लिए हर स्तंभ एक सूची हो सकती है, और आप प्रत्येक सूची को व्यक्तिगत रूप से उन पर कुछ कार्यों को लागू करने का इलाज कर सकते हैं, और सांख्यिकीय संचालन के बारे में बात कर सकते हैं, जैसे कि माध्य, मानक विचलन, चतुर्थक, और। ..
मज़ार ५

धन्यवाद! यह वास्तव में मेरे लिए बहुत उपयोगी है। मैंने हमेशा सीएसवी फ़ाइल को सीएसवी मॉड्यूल के साथ लोड किया है जो मुझे सूचियों की सूची देता है। यह डेटा.फ्रेम बेहतर लगता है!
LWZ

@LWZ: मेरे संपादन और लिंक को देखें, अगर आपके सवालों का जवाब देने में वह चूक जाता है तो lmk करें। यह उतना ही है जितना हम यहां लाभ पैकेज को 'बेचने' के लिए कर सकते हैं। व्यापक प्रश्न "सादे पायथन सरणी / सूची-सूची में एक पांडा डेटाफ्रेम का उपयोग करने के क्या लाभ हैं?" कई फायदे हैं, यहाँ सूचीबद्ध करने के लिए बहुत सारे ...
smci

जवाबों:


159

बचाव के लिए पांडा :

import pandas as pd
print pd.read_csv('value.txt')

        Date    price  factor_1  factor_2
0  2012-06-11  1600.20     1.255     1.548
1  2012-06-12  1610.02     1.258     1.554
2  2012-06-13  1618.07     1.249     1.552
3  2012-06-14  1624.40     1.253     1.556
4  2012-06-15  1626.15     1.258     1.552
5  2012-06-16  1626.15     1.263     1.558
6  2012-06-17  1626.15     1.264     1.572

यह पंडों DataFrame है कि के समान है देता है R's


9

यहाँ पाइथन लाइब्रेरी का एक विकल्प है जिसका उपयोग पायथन के अंतर्निहित सीएसवी मॉड्यूल का उपयोग करके किया गया है ।

import csv
from pprint import pprint
with open('foo.csv', 'rb') as f:
    reader = csv.reader(f)
    headers = reader.next()
    column = {h:[] for h in headers}
    for row in reader:
        for h, v in zip(headers, row):
            column[h].append(v)
    pprint(column)    # Pretty printer

छप जाएगा

{'Date': ['2012-06-11',
          '2012-06-12',
          '2012-06-13',
          '2012-06-14',
          '2012-06-15',
          '2012-06-16',
          '2012-06-17'],
 'factor_1': ['1.255', '1.258', '1.249', '1.253', '1.258', '1.263', '1.264'],
 'factor_2': ['1.548', '1.554', '1.552', '1.556', '1.552', '1.558', '1.572'],
 'price': ['1600.20',
           '1610.02',
           '1618.07',
           '1624.40',
           '1626.15',
           '1626.15',
           '1626.15']}

9

एक पांडा डेटाफ़्रेम के रूप में एक सीएसवी फ़ाइल पढ़ने के लिए, आपको उपयोग करने की आवश्यकता होगी pd.read_csv

लेकिन यह वह जगह नहीं है जहां कहानी समाप्त होती है; डेटा कई अलग-अलग स्वरूपों में मौजूद है और इसे विभिन्न तरीकों से संग्रहीत किया जाता है, इसलिए आपको अक्सर अतिरिक्त मापदंडों को पारित करने की आवश्यकता होगीread_csv आपके डेटा को ठीक से पढ़ने के लिए सुनिश्चित लिए ।

यहां CSV फ़ाइलों के साथ सामना किए जाने वाले सामान्य परिदृश्यों की सूची दी गई है, जिनका उपयुक्त तर्क के साथ आपको उपयोग करने की आवश्यकता होगी। आपके डेटा में पढ़ने के लिए आपको आमतौर पर सभी या नीचे दिए गए तर्कों के संयोजन की आवश्यकता होगी ।

┌──────────────────────────────────────────────────────────┬─────────────────────────────┬────────────────────────────────────────────────────────┐
│  ScenarioArgumentExample                                               │
├──────────────────────────────────────────────────────────┼─────────────────────────────┼────────────────────────────────────────────────────────┤
│  Read CSV with different separator¹                      │  sep/delimiter              │  read_csv(..., sep=';')                                │
│  Read CSV with tab/whitespace separator                  │  delim_whitespace           │  read_csv(..., delim_whitespace=True)                  │
│  Fix UnicodeDecodeError while reading²                   │  encoding                   │  read_csv(..., encoding='latin-1')                     │
│  Read CSV without headers³                               │  header and names           │  read_csv(..., header=False, names=['x', 'y', 'z'])    │
│  Specify which column to set as the index⁴               │  index_col                  │  read_csv(..., index_col=[0])                          │
│  Read subset of columns                                  │  usecols                    │  read_csv(..., usecols=['x', 'y'])                     │
│  Numeric data is in European format (eg., 1.234,56)      │  thousands and decimal      │  read_csv(..., thousands='.', decimal=',')             │
└──────────────────────────────────────────────────────────┴─────────────────────────────┴────────────────────────────────────────────────────────┘

फुटनोट

  1. डिफ़ॉल्ट रूप से, read_csvप्रदर्शन के लिए C पार्सर इंजन का उपयोग करता है। C पार्सर केवल एकल वर्ण विभाजकों को संभाल सकता है। यदि आपके CSV में एक मल्टी-कैरेक्टर विभाजक है, तो आपको 'python'इंजन का उपयोग करने के लिए अपने कोड को संशोधित करना होगा । आप नियमित अभिव्यक्ति भी पास कर सकते हैं:

    df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')
    
  2. UnicodeDecodeErrorतब होता है जब डेटा को एक एन्कोडिंग प्रारूप में संग्रहीत किया गया था लेकिन एक अलग, असंगत एक में पढ़ा जाता है। सबसे आम एन्कोडिंग योजनाएं हैं 'utf-8'और 'latin-1', आपका डेटा इनमें से किसी एक में फिट होने की संभावना है।

  3. header=Falseयह निर्दिष्ट करता है कि CSV में पहली पंक्ति हेडर पंक्ति के बजाय एक डेटा पंक्ति है, और names=[...]जब यह बनता है तो आपको DataFrame को असाइन करने के लिए कॉलम नामों की एक सूची निर्दिष्ट करने की अनुमति देता है।

  4. "बेनाम: 0" तब होता है जब एक बिना नाम वाले सूचकांक के साथ एक DataFrame CSV में सहेजा जाता है और उसके बाद फिर से पढ़ा जाता है। पढ़ने के दौरान समस्या को ठीक करने के बजाय, आप उपयोग करके लिखते समय समस्या को ठीक कर सकते हैं

    df.to_csv(..., index=False)
    

ऐसे अन्य तर्क हैं जिनका मैंने यहां उल्लेख नहीं किया है, लेकिन ये वे हैं जिनका आप सबसे अधिक बार सामना करेंगे।


1
आप जैसे का उपयोग कर यूनिकोड पाठ के रूप तालिका के रूप में छवि पुनः स्वरूपित repaste / कृपया कर सकते ozh.github.io/ascii-tables ? अन्यथा यह पढ़ना मुश्किल है, और सामग्री खोज के लिए अनुक्रमित नहीं किया जाएगा, या सादे पुराने Ctrl-F पाठ खोज के साथ खोजा जा सकता है।
smci

@smci मैं सहमत हूं कि आपने अनुक्रमण के बारे में क्या कहा (प्लस तथ्य यह है कि छवियों को अन्य लोगों द्वारा संपादित नहीं किया जा सकता है) लेकिन यह लगभग उतना अच्छा नहीं दिखता है और स्क्रॉल करने की आवश्यकता होती है जो इसे पालन करना कठिन बनाता है।
CS95

वैसे भी आपको एक नए उपयोगकर्ता के लिए उपयोगकर्ता के अनुकूल होने के लिए इसे फिर से लिखना होगा; 'से बचें "की तरह समझ से बाहर सामान की जगह : बेनाम: 0"' यह कुछ सादे अंग्रेजी की तरह कहना चाहिए : ' index_colपांडा बताओ कि कौन सा कॉलम (ओं) को आपके
डेटाफ्रेम के

@ एस्की की तरह दिखता है ASCII टेबल सुपरस्क्रिप्ट के साथ अच्छी तरह से नहीं खेलते हैं - यह तालिका स्वरूपण को गड़बड़ कर देता है।
CS95

cs95: मैंने यूनिकोड की सिफारिश की, ASCII की नहीं। यूनिकोड ठीक काम करता है। तो बस ozh.github.io/ascii-tables
30'19

6
import pandas as pd
df = pd.read_csv('/PathToFile.txt', sep = ',')

यह आपकी .txt या .csv फ़ाइल को DataFrame में आयात करेगा।



1
%cd C:\Users\asus\Desktop\python
import pandas as pd
df = pd.read_csv('value.txt')
df.head()
    Date    price   factor_1    factor_2
0   2012-06-11  1600.20 1.255   1.548
1   2012-06-12  1610.02 1.258   1.554
2   2012-06-13  1618.07 1.249   1.552
3   2012-06-14  1624.40 1.253   1.556
4   2012-06-15  1626.15 1.258   1.552

0

आप CSV फ़ाइलों में हेरफेर करने के लिए अजगर मानक पुस्तकालय में पाए गए csv मॉड्यूल का उपयोग कर सकते हैं ।

उदाहरण:

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print row

-0। R से आ रहा है, mazlor csvमॉड्यूल की तलाश में नहीं होगा क्योंकि यह बहुत कम स्तर है। pandasअमूर्त के अनुरोध स्तर प्रदान करता है।
स्टीवन रुंबलस्की

... इसके अलावा यह डेटा को एक उपयोगी पायथन ऑब्जेक्ट में पढ़ता है जैसे कि एक सुस्पष्ट सरणी ...
पॉल हीमस्ट्ररा

0

pd
डाटासेट के रूप में आयात पांडा = pd.read_csv ('/ घर / nspython / डाउनलोड / movie_metadata1.csv')


-1

नोट काफी साफ है, लेकिन:

import csv

with open("value.txt", "r") as f:
    csv_reader = reader(f)
    num = '  '
    for row in csv_reader:
        print num, '\t'.join(row)
        if num == '  ':  
            num=0
        num=num+1

कॉम्पैक्ट के रूप में नहीं, लेकिन यह काम करता है:

   Date price   factor_1    factor_2
1 2012-06-11    1600.20 1.255   1.548
2 2012-06-12    1610.02 1.258   1.554
3 2012-06-13    1618.07 1.249   1.552
4 2012-06-14    1624.40 1.253   1.556
5 2012-06-15    1626.15 1.258   1.552
6 2012-06-16    1626.15 1.263   1.558
7 2012-06-17    1626.15 1.264   1.572

1
यह ओपी के प्रश्न का उत्तर नहीं देता है क्योंकि यह पायथन ऑब्जेक्ट में सीएसवी डेटा को नहीं पढ़ता है।
पॉल हेमस्ट्रा

शायद लूप में गणना के साथ संख्या को बदलें?
LWZ

@PaHiemstra, ओपी ने "ऑब्जेक्ट" का उल्लेख नहीं किया, लेकिन आसानी से पूछें। फिर भी, मुझे संदेह है कि "पांडा" दृष्टिकोण बेहतर फिट बैठता है जो इसके लिए कहा जा रहा था।
ली-मैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.