2013-10-18 3 views
1

팬더에서 CSV 파일을 가져 오려고하는데 오류가 발생합니다. 제 로우 인 열 이름 다음 ++ 메모장에서 열 데이터의 형식은 다음Pandas read_csv 파일 가져 오기 오류

"End Customer Organization ID,End Customer Organization Name,End Customer Top Parent Organization ID,End Customer Top Parent Organization Name,Reseller Top Parent ID,Reseller Top Parent Name,Business,Rev Sum Division,Rev Sum Category,Product Family,Version,Pricing Level,Summary Pricing Level,Detail Pricing Level,MS Sales Amount,MS Sales Licenses,Fiscal Year,Sales Date" 
"11027676,Baroda Western Uttar Pradesh Gramin Bankgfhgfnjgfnmjmhgmghmghmghmnghnmghnmhgnmghnghngh,4078446,Bank Of Barodadfhhgfjyjtkyukujkyujkuhykluiluilui;iooi';po'fserwefvegwegf,1809012,""Hcl Infosystems Ltd - Partnerdghftrutyhb frhywer5y5tyu6ui7iukluyj,lgjmfgnhfrgweffw"",Server & CALsdgrgrfgtrhytrnhjdgthjtyjkukmhjmghmbhmgfngdfbndfhtgh,SQL Server & CALdfhtrhtrgbhrghrye5y45y45yu56juhydsgfaefwe,SQL CALdhdfthtrutrjurhjethfdehrerfgwerweqeadfawrqwerwegtrhyjuytjhyj,SQL CALdtrye45y3t434tjkabcjkasdhfhasdjkcbaksmjcbfuigkjasbcjkasbkdfhiwh,2005,Openfkvgjesropiguwe90fujklascnioawfy98eyfuiasdbcvjkxsbhg,Open Lklbjdfoigueroigbjvwioergyuiowerhgosdhvgfoisdhyguiserhguisrh,""Open Stddfm,vdnoghioerivnsdflierohgushdfovhsiodghuiohdbvgsjdhgouiwerho"",125.85,1,FY07,12/28/2006" 
"12835756,Uttam Strips Pvt Ltd,12835756,Uttam Strips Pvt Ltd,12565538,Redington C/O Fortis Financial Services Ltd,MBS,Dynamics ERP,Dynamics NAV,Dynamics NAV Business Essentials,Non-specific,Other,MBS SA,MBS New Customer Enhanc. Def,0,0,FY09,9/15/2008" 
"12233135,Bhagwan Singh Tondon,12233135,Bhagwan Singh Tondon,2652941,H B S Systems Pvt Ltd,Server & CAL,SQL Server & CAL,SQL CAL,SQL CAL,Non-specific,Open,Open L&SA,Deferred Open L&SA - New,0,0,FY09,9/15/2008" 
"11602305,Maya Academy Of Advanced Cinematics,9750934,Maya Entertainment Ltd,336146,Embee Software Pvt Ltd,Server & CAL,Windows Server & CAL,Windows Server HPC,Windows Compute Cluster Server,Non-specific,Open,Open V/MYO - Rec,OLV Perpet L&SA Recur-Def,0,0,FY09,9/25/2008" 
"13336009,Remiel Softech Solution Pvt Ltd,13336009,Remiel Softech Solution Pvt Ltd,13335482,Redington C/O Remiel Softech Solutions Pvt Ltd,MBS,Dynamics ERP,Dynamics NAV,Dynamics NAV Business Essentials,Non-specific,Other,MBS SA,MBS New Customer Enhanc. Def,0,0,FY09,12/23/2008" 
"7872800,Science Application International Corporation,2839760,GOVERNMENT OF KARNATAKA,10237455,Cubic Computing P.L,Server & CAL,SQL Server & CAL,SQL Server Standard,SQL Server Standard Edition,Non-specific,Open,Open SA/UA,Deferred Open SA - Renewal,0,0,FY09,1/15/2009" 
"13096361,Pratham Software Pvt Ltd,13096361,Pratham Software Pvt Ltd,10133086,Krap Computer,Information Worker,Office,Office Standard/Basic,Office Standard,2007,Open,Open L,Open Std,7132.44,28,FY09,9/24/2008" 
"12192276,Texmo Precision Castings,12192276,Texmo Precision Castings,4059430,Quadra Systems. - Partner,Server & CAL,Windows Server & CAL,Windows Standard Server,Windows Server Standard,Non-specific,Open,Open L&SA,Deferred Open L&SA - New,0,0,FY09,11/15/2008" 

친절 이중는 CSV 형식 클릭 같은 파일은 쉼표로 구분 값 BUT NO 불허로 열리는 도와 메모장 ++에 표시된 것처럼 각 줄에 따옴표를 붙입니다. I는 다음과 같은 오류를 제공 UTF-8 인코딩을 사용한

: 먼저

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 13: invalid start byte 

이어서 사용 부호화 = 'CP1252'및 라틴으로 보았습니다.

df=pd.read_csv(filename,encoding='cp1252') 

or 

df=pd.read_csv(filename,encoding='latin1') 

두 인코딩 모두 오류가 발생하지 않았으며 데이터가 가져 왔지만 하나의 단일 열과 다른 열로 가져 오지 않았습니다.

데이터의 각 줄 앞에있는 ""표시와 관련이 있습니까? 쉼표로 구분 된 값으로 비슷한 CSV 파일을 가지고 있지만 각 줄마다 큰 따옴표가없고 cp1252와 latin1을 모두 올바르게 가져 왔습니다. 하지만 UTF-8은 파일이 메모장 ++에서 utf8 형식으로 저장되었지만 없습니다. 하지만이 경우 utf8은 평소와 같이 작동하지 않으며 다른 두 개는 단일 열로 가져옵니다.

알려 주시기 바랍니다.

감사

+1

모든 줄은 왜 따옴표로 묶여 있습니까? 그냥 제거하면 가져 오기가 정상적으로 작동합니다. – sloth

+0

@DominicKexel 예, 그렇습니다. 메모장에서 파일을 열면 ++에서 모든 줄이 인용 부호로 표시됩니다. 어쩌면 그것은 인코딩을 막고 있을지도 모른다. 그래서 제 질문은 i) 따옴표도 처리 할 수있는 인코딩이 있습니까? ii) 그렇지 않다면, 각 줄에서 따옴표를 제거하는 방법? – Baktaawar

+0

@DominicKexel 안녕하세요, 나는 판다의 read_csv 함수에서 찾을 수있는 거의 모든 옵션을 시도했지만 위의 인용문 문제를 해결하지 않거나 인코딩하는 경우 별도의 열로 읽지 않아도되므로이 문제를 해결할 수 있으면 좋겠습니다. = 'latin1'또는 인코딩 = 'cp1252'. 도와주세요! – Baktaawar

답변

0

나는 인용 부호가 탈출로 내의 모든 쉼표를 해석하는 원인이 확실 해요. 그래서, 당신은 그들 모두를 제거해야합니다. 그것은 상대적으로 간단하지만 유니 코드 문제로 인해 나는 미친 듯이 읽고 그것을 읽으라고 제안합니다. 따옴표를 제거한 다음 read_csv과 함께 사용할 파일에 쓰십시오 (인코딩 문제가 간단 해지기 때문에). . 당신이 읽는 완료 후

with open(filename) as infile, open(tmpfile, 'wb') as outfile: 
    for line in infile: 
     outfile.write(line.strip('"')) 

result = pd.read_csv(tmpfile, encoding='cp1252') 

당신은 임시 파일을 제거 할 것 :

은 여기에 파일을 작성하고 따옴표를 제거, 새 파일에 기록, 다음 read_csv으로 읽는 방법 그것도.

StringIO 버퍼로 전달할 때 인코딩/디코딩 처리를 피하기 때문에 위와 같이하는 것이 좋습니다 - 파이썬과 팬더 모두에 까다로운 작업 일 수 있습니다.

관련 문제