이것은 내 처음으로 팬더에서 일하는 것으로 나의 무지를 용서합니다. 내 요구 사항은 S3에서 Ec2로 파일을 다운로드하고 dat 파일을 데이터 프레임에 저장하는 것입니다. 이 데이터가 어떤 인코딩을 갖고있는 것 같다하지 않았거나 그래서 난 dataframe에서 세 디유 및 저장 등의 구분으로 read_Csv을 사용하기로 결정으로 내 입력 파일의 데이터가데이터 프레임의 열로 분할되지 않는 cedilla로 구분 된 * .dat 파일의 pandas read_csv
1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012ÇFillerÇ
1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011ÇFillerÇ
1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011ÇFillerÇ
1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014ÇFillerÇ
1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011ÇFillerÇ
1Ç74Ç99991Ç4364Ç5555Ç0Ç0Ç1ÇEEÇ014ÇFillerÇ
을 모습이다.
iFldDelim = 'Ç'
tf = pandas.read_csv(itextfile, iFldDelim, nrows = 5,header=None)
하지만 어떤 이유로 인해 동일한 것을 인식하지 못하고 하나의 열에 데이터를 넣습니다.
0
0 1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012ÇFi...
1 1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011ÇFi...
2 1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011ÇFi...
3 1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014ÇFi...
4 1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011ÇFi...
파일이 ASCII처럼 보이고 인코딩되지 않았습니다. 인코딩을 UTF-8 및 UTF-16으로 사용하고 Unicode 값을 구분 기호로 사용하려고 시도했지만 작동하지 않습니다. 또한 세 딜라 대신 'F'로 구분 기호를 하드 코드하고 코드 자체가 일부 암호화/인코딩을 가질 수 있다고 생각하는 코드를 실행하려고했습니다. 하지만 그건 사실이 아니야, 나는 'F'로 구분 된 출력을 얻었습니다.
구분 기호가 'F'인 경우.
0 1
0 1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012Ç illerÇ
1 1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011Ç illerÇ
2 1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011Ç illerÇ
3 1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014Ç illerÇ
4 1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011Ç illerÇ
파일은 일반적으로 거대한 하나이며이 파일은 오랜 시간 실행됩니다. 그래서 나는 UTF-8 코덱을 사용하여 파일을 인코딩 한 다음 데이터 프레임 넣을 현명한 옵션인지 잘 모르겠습니다.
나는 수동으로 세 딜라로 구분 된 파일을 만들려고했는데 같은 명령을 통과했을 때 모두 잘 동작했다. 나는 여기서 잘못된 것이 무엇인지 알 수 없다. 인코딩 된 경우 알아낼 수있는 방법이 있습니까?
모든 조언을 크게 듣습니다.
덕분에, VB
Edchum 조언을 채택, 난
#file location
dataPath = "C:/Users/Documents/Pytest/"
itextfile = join(dataPath,'sample.dat')
fb = open(itextfile, 'r')
data = fb.read()
print(data)
tf=pandas.read_csv(StringIO(data), sep='Ç', header=None)
#tf=pandas.read_csv(StringIO(data), sep='\Ç', header=None)
print(tf)
데이터는
1Ç71Ç23929Ç44Ç5685Ç0Ç0Ç1ÇaaÇ012ÇFillerÇ
1Ç72Ç23953Ç40Ç3319Ç0Ç0Ç1ÇbbÇ011ÇFillerÇ
1Ç73Ç23957Ç43Ç7323Ç0Ç0Ç1ÇccÇ011ÇFillerÇ
1Ç74Ç24006Ç41Ç6938Ç0Ç0Ç1ÇbbÇ014ÇFillerÇ
1Ç75Ç24140Ç45Ç0518Ç0Ç0Ç1ÇddÇ011ÇFillerÇ
Output
0 1 2 3 4 5 6 7 8 9 10 11
0 1 71 23929 44 5685 0 0 1 aa 12 Filler NaN
1 1 72 23953 40 3319 0 0 1 bb 11 Filler NaN
2 1 73 23957 43 7323 0 0 1 cc 11 Filler NaN
는 그래서 9월 = '를 사용하여 파일에서 아래와 같이 나온, 아래의 사용 sep = '\ Ç'대신 '‡'을 사용했습니다. 내가 스크립트를 실행할 때 육안으로 (왜 내가 sample.dat 파일을 열 때) 코즈하는지 세드밀 기호로 구분 된 것처럼 보이는 이유는 확실하지 않습니다.
외부에 pandas.read_csv (StringIO) 명령을 읽지 않고 텍스트 파일을 전달하는 방법은 무엇입니까? Dataframe에 읽고 읽은 행의 수를 제한하고 싶었 기 때문에이 질문을드립니다. 나가 처음 몇 줄만 가지고 싶으면 나가 Totrows를 추가하고 최후에 나는 skiprows를 사용했다. 수백만 행의 거대한 파일을 처리하는 방법은 최소한의 시간이 소요됩니다. 이것이 가능하지 않다면 for 루프를 for 루프로 사용합니다. for 루프없이 수행 할 수있는 방법이 있는지 확인하고 싶었습니다.
감사합니다, VB
흠, 당신은'pd.read_csv을 시도 할 수는 (itextfile 9 월 = R '\ C', NROWS = 5, 헤더 = 없음)'이'가 원하는 나를 위해 나를 – EdChum