我正在使用Django构建网络应用。我使用
上传了一个文本文件csv_file = request.FILES ['file']。
我无法将csv读入熊猫。我要导入的文件具有文本和数据,但我只需要数据。
我尝试了以下
错误:熊猫不会读取所有3列。它只会读取1列
错误:无法在类似字节的对象上使用字符串模式
我上传的文件
% 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
答案 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)