팬더를 실험하면서 pandas.read_csv의 이상한 행동을 발견했으며 더 많은 경험을 가진 사람이 그 원인을 설명 할 수 있는지 궁금해했습니다. 꽤 잘열려있는 파일에서 Pandas read_csv()를 두 번 사용하기
import pandas as pd
class dataMatrix:
def __init__(self, filepath):
self.path = filepath # File path to the target .csv file.
self.csvfile = open(filepath) # Open file.
self.csvdataframe = pd.read_csv(self.csvfile)
자,이 작품 내 __ 주요 __.py의 클래스를 호출 :
여기 .csv 파일에서 새 pandas.dataframe을 만들기위한 나의 기본 클래스 정의는, 시작하려면From dataMatrix.py import dataMatrix
testObject = dataMatrix('/path/to/csv/file')
을하지만이 과정이 자동으로 pandas.dataframe.columns 지수로 .CSV의 첫 번째 행을 설정하는 것을 알아 차리지되었다 성공적으로 팬더 dataframe을 만듭니다. 대신, 난 번호를 매기기로 결정했다. 필자는 이전에 열의 수를 알고 있다고 가정하고 싶지 않았기 때문에 파일을 열고 데이터 프레임에로드하고 열을 계산 한 다음 범위를 사용하여 적절한 수의 열을 사용하여 데이터 프레임을 다시로드하는 방식을 취했습니다 (). __ 주요 __.py에서 같은 내 처리를 유지
는import pandas as pd
class dataMatrix:
def __init__(self, filepath):
self.path = filepath
self.csvfile = open(filepath)
# Load the .csv file to count the columns.
self.csvdataframe = pd.read_csv(self.csvfile)
# Count the columns.
self.numcolumns = len(self.csvdataframe.columns)
# Re-load the .csv file, manually setting the column names to their
# number.
self.csvdataframe = pd.read_csv(self.csvfile,
names=range(self.numcolumns))
, 내가 다시 적절한 이름 (0 ~ 499)와 컬럼의 정확한 숫자 (이 경우 500)와 dataframe를 얻었으나, 그것은이었다 그렇지 않으면 빈 (행 데이터 없음). 내 머리를 긁적
는, 나는 self.csvfile을 닫고과 같이 다시로드하기로 결정
import pandas as pd
class dataMatrix:
def __init__(self, filepath):
self.path = filepath
self.csvfile = open(filepath)
# Load the .csv file to count the columns.
self.csvdataframe = pd.read_csv(self.csvfile)
# Count the columns.
self.numcolumns = len(self.csvdataframe.columns)
# Close the .csv file. #<---- +++++++
self.csvfile.close() #<---- Added
# Re-open file. #<---- Block
self.csvfile = open(filepath) #<---- +++++++
# Re-load the .csv file, manually setting the column names to their
# number.
self.csvdataframe = pd.read_csv(self.csvfile,
names=range(self.numcolumns))
파일을 닫고 열 번호가 0으로는 pandas.dataframe 제대로 반환 개방을 다시 ... 499 및 모든 255 개의 후속 데이터 행.
내 질문에 왜 파일을 닫고 다시 열면 차이가 발생합니까? 당신이
open(filepath)
파일 핸들 반복자을 가진 파일을 열 때
감사 파일 반복자에 대한 정보를 원하시면. 그건 의미가 있습니다. 열린 파일 대신 'filepath'를 전달하도록 변경합니다.그러나 마지막에 제안한대로 열의 이름을 바꾸면 열 이름이 바뀌므로 첫 번째 데이터 행이 손실됩니다. –
그런 다음'header = None'을 추가하여 데이터의 첫 번째 행이 열 이름으로 해석되지 않고 데이터의 일부가되도록합니다. – unutbu
아 그래, header = None에 대해 잊어 버렸습니다 ... 작동하도록하는 데 문제가 있습니다.하지만 그것은 별개의 문제입니다. 내 원래의 질문에 답변 해 주셔서 감사합니다! 나는 'openfile'행동을 일으키는 낮은 수준의 "비하인드"상호 작용에 대해서만 궁금해했습니다. 감사! –