将数据从文本文件导入到熊猫数据框

时间:2019-04-10 22:17:39

标签: python django pandas

我正在使用Django构建网络应用。我使用

上传了一个文本文件

csv_file = request.FILES ['file']。

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

我尝试了以下

  1. df = pd.read_csv(csv_file,sep =“”,标头=无,名称= [“ col1”,“ col2”,“ col3”],跳过= 2)尝试删除注释并仅阅读数字

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

  1. 我尝试了df = pd.read_csv(csv_file,sep =“ \ s {2}”,sep =“”,标头=无,名称= [“ col1”,“ col2”,“ col3”],跳过= 2)尝试删除评论并仅阅读数字

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

  1. 我尝试了df = pd.read_csv(csv_file.read(),sep =“ 、、标头=无,名称= [” col1“,” col2“,” col3“],skirprows = 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 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

2 个答案:

答案 0 :(得分:0)

这适用于您提供的数据,并为您提供了所需的数据框:

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

由于sep是多个字符,因此您需要使用python引擎而不是C引擎。 python引擎有时在引号上遇到麻烦,但是您没有任何引号,所以很好。实际上,您甚至不需要指定python引擎,它会自动为您选择,但是会向stderr警告。指定引擎可以抑制这种情况。

答案 1 :(得分:0)

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

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