2

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

csv_file = request.FILES['file']。

我无法将 csv 读入熊猫。我试图导入的文件有文本和数据,但我只想要数据。

我试过以下

  1. df = pd.read_csv(csv_file, sep=" ", header=None, names=["col1","col2","col3"], skiprows = 2) 尝试删除评论并仅读取数字

错误:pandas 不会读取所有 3 列。它只读取 1 列

  1. 我试过 df = pd.read_csv(csv_file, sep="\s{2}", sep=" ", header=None, names=["col1","col2","col3"], skiprows = 2)尝试删除评论并阅读数字

错误:不能在类似字节的对象上使用字符串模式

  1. 我试过 df = pd.read_csv(csv_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

视图.py

def new_measurement(request, pk):
    material = Material.objects.get(pk=pk)
    if request.method == 'POST':
        form = NewTopicForm(request.POST)
        if form.is_valid():
            topic = form.save(commit=False)
            topic.material = material
            topic.message=form.cleaned_data.get('message')
            csv_file = request.FILES['file']
            df = genDataFrame(csv_file)
            topic.data = df
            topic.created_by = request.user
            topic.save()
            return redirect('topic_detail', pk =  material.pk)
    else:
        form = NewTopicForm()
    return render(request, 'new_topic.html', {'material': material, 'form': form})
def genDataFrame(csv_file):
    df = pd.read_csv(csv_file, sep=" ", header=None, names=["col1","col2","col3"])
    df = df.convert_objects(convert_numeric=True)
    df = df.dropna()
    df = df.reset_index(drop = True)
    return df_list

我想得到一个像

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
4

2 回答 2

0

您在描述点#2 中采用了几乎正确的方法。另外,我的答案只是将正则表达式作为分隔符添加到@prooffreader 的答案中,因为它会使语句不易出错。

 df = pd.read_csv('file_path', sep="\s+",header=None, 
                    names=['col1', 'col2','col3'], skiprows=2)
于 2019-04-10T23:01:24.170 回答
0

这适用于您提供的数据,并为您提供您期望的数据框:

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

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

于 2019-04-10T22:41:29.817 回答