Python 将文本文件中的数据导入数据框

Python 将文本文件中的数据导入数据框,python,django,pandas,Python,Django,Pandas,我正在使用Django构建一个web应用程序。我上传了一个文本文件使用 csv_file=request.FILES['file'] 我无法将csv读入熊猫。我尝试导入的文件包含文本和数据,但我只需要数据 我试过以下方法 df=pd.read_csv(csv_file,sep=“”,header=None,names=[“col1”、“col2”、“col3”]、skiprows=2)尝试删除注释并读取数字 错误:熊猫将不会读取所有3列。它只读取1列 我尝试了df=pd.read_csv(csv

我正在使用Django构建一个web应用程序。我上传了一个文本文件使用

csv_file=request.FILES['file']

我无法将csv读入熊猫。我尝试导入的文件包含文本和数据,但我只需要数据

我试过以下方法

  • df=pd.read_csv(csv_file,sep=“”,header=None,names=[“col1”、“col2”、“col3”]、skiprows=2)尝试删除注释并读取数字
  • 错误:熊猫将不会读取所有3列。它只读取1列

  • 我尝试了df=pd.read_csv(csv_文件,sep=“\s{2}”,sep=“”,header=None,names=[“col1”,“col2”,“col3”],skiprows=2)来删除注释,只读取数字
  • 错误:无法在类似字节的对象上使用字符串模式

  • 我尝试了df=pd.read\u csv(csv\u file.read(),sep=“”,header=None,names=[“col1”、“col2”、“col3”]、skiprows=2)来删除注释,只读取数字
  • 我上传的文件

    % filename
    % username
    2.0000  117.441  -0.430
    2.0100  117.499  -0.337
    2.0200  117.557  -0.246
    2.0300  117.615  -0.157
    2.0400  117.672  -0.069
    
    views.py

    def新测量(请求,主键):
    material=material.objects.get(pk=pk)
    如果request.method==“POST”:
    form=NewTopicForm(request.POST)
    如果form.is_有效():
    topic=form.save(commit=False)
    topic.material=材料
    topic.message=form.cleaned\u data.get('message')
    csv_file=request.FILES['file']
    df=genDataFrame(csv_文件)
    topic.data=df
    topic.created_by=request.user
    topic.save()
    返回重定向('topic_detail',pk=material.pk)
    其他:
    form=NewTopicForm()
    返回呈现(请求'new_topic.html',{'material':material,'form':form})
    
    def genDataFrame(csv_文件):
    df=pd.read_csv(csv_文件,sep=”“,header=None,names=[“col1”、“col2”、“col3”])
    df=df.convert\u对象(convert\u numeric=True)
    df=df.dropna()
    df=df.reset_索引(drop=True)
    返回DFU列表
    
    我想要一个像这样的数据帧

    col1   col2     col3
    2.0000  117.441  -0.430
    2.0100  117.499  -0.337
    2.0200  117.557  -0.246
    2.0300  117.615  -0.157
    2.0400  117.672  -0.069
    

    这将对您提供的数据起作用,并为您提供所需的数据帧:

    df = pd.read_csv(csv_filepath, sep='  ', header=None, 
                     names=['col1', 'col2', 'col3'], skiprows=2, engine='python')
    

    因为
    sep
    不止一个字符,所以需要使用python引擎而不是C引擎。python引擎有时会遇到引号问题,但您没有引号,所以这很好。实际上,您甚至不需要指定python引擎,它将自动为您选择,但您将得到一个对stderr的警告;指定引擎会抑制这种情况。

    您在描述点2中的方法几乎是正确的。另外,我的答案只是将regex作为分隔符添加到@prooffreader的答案中,因为它将使语句不那么容易出错

     df = pd.read_csv('file_path', sep="\s+",header=None, 
                        names=['col1', 'col2','col3'], skiprows=2)
    

    当sep=''时,我得到一个错误“不能在类似字节的对象上使用字符串模式”。当我有sep='\s+'时,警告是“字符串中的异常反斜杠:'\s'。字符串常量可能缺少一个r前缀”,它给我一个空的数据帧当你在正则表达式中使用反斜杠时,你需要使用原始文本,即sep=r'\s+'作为类似于bytest的对象,听起来你好像还没有将文件解码成文本格式。你能告诉我如何将文件解码成文本格式吗?当我键入csv_filepath.read()时,类类型是“bytes”。当我的sep=''时,我得到一个错误“无法在类似字节的对象上使用字符串模式”。当我有sep='\s+'时,警告是“字符串中的异常反斜杠:'\s'。字符串常量可能缺少一个r前缀”,它使用分隔符=r'\s+'给我一个空的DataFrameTry。如果这不起作用,你可以发布完整的代码,你用它来读取文件和文件吗?理想情况下,您不应该出现这样的错误。谢谢!成功了。我不得不重新进口。这就是错误所在