将文本文件中的数据导入 pandas 数据框
Posted
技术标签:
【中文标题】将文本文件中的数据导入 pandas 数据框【英文标题】:Import data from a text file into a pandas dataframe 【发布时间】:2019-09-01 11:23:00 【问题描述】:我正在使用 Django 构建一个网络应用程序。我使用
上传了一个文本文件csv_file = request.FILES['file'].
我无法将 csv 读入 pandas。我试图导入的文件有文本和数据,但我只想要数据。
我尝试了以下方法
-
df = pd.read_csv(csv_file, sep=" ", header=None, names=["col1","col2","col3"], skiprows = 2) 尝试删除 cmets 并读取数字
错误:pandas 不会读取所有 3 列。它只读取 1 列
-
我试过 df = pd.read_csv(csv_file, sep="\s2", sep=" ", header=None, names=["col1","col2","col3"], skiprows = 2) 尝试移除 cmets 并读取数字
错误:不能在类似字节的对象上使用字符串模式
-
我尝试 df = pd.read_csv(csv_file.read(), sep=" ", header=None, names=["col1","col2","col3"], skiprows = 2) 尝试删除cmets,只需阅读数字
我上传的文件
% 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
【问题讨论】:
【参考方案1】:这适用于您提供的数据,并为您提供您期望的数据框:
df = pd.read_csv(csv_filepath, sep=' ', header=None,
names=['col1', 'col2', 'col3'], skiprows=2, engine='python')
因为sep
不止一个字符,所以需要使用python引擎而不是C引擎。 python 引擎有时会遇到引号问题,但你没有,所以没关系。您实际上甚至不需要指定 python 引擎,它会自动为您选择,但您会收到 stderr 的警告;指定引擎会抑制这种情况。
【讨论】:
当我有 sep = ' ' 时,我收到一个错误“不能在类似字节的对象上使用字符串模式”。当我有 sep = '\s+' 时,警告是“字符串中的异常反斜杠:'\s'。字符串常量可能缺少 r 前缀”,它给了我一个空的 DataFrame 在正则表达式中使用反斜杠时,需要使用原始文本,即 sep=r'\s+' 至于您的类似字节测试的对象,听起来您还没有将文件解码为文本格式。 您能告诉我如何将我的文件解码为文本格式吗?当我键入 csv_filepath.read() 时,类类型是“字节”。【参考方案2】:您在描述点#2 中的方法几乎是正确的。另外,我的答案只是将正则表达式作为分隔符添加到@prooffreader 的答案中,因为它会使语句不易出错。
df = pd.read_csv('file_path', sep="\s+",header=None,
names=['col1', 'col2','col3'], skiprows=2)
【讨论】:
当我有 sep = ' ' 时,我收到一个错误“不能在类似字节的对象上使用字符串模式”。当我有 sep = '\s+' 时,警告是“字符串中的异常反斜杠:'\s'。字符串常量可能缺少 r 前缀”,它给了我一个空的 DataFrame 尝试使用分隔符 = r'\s+'。如果这不起作用,您能否发布您用于读取文件和文件的完整代码?理想情况下,您不应该收到这样的错误。 谢谢!有效。我不得不重新导入。那是错误以上是关于将文本文件中的数据导入 pandas 数据框的主要内容,如果未能解决你的问题,请参考以下文章
Python - Pandas - 导入 Excel 文件,遍历每一行,添加新值,并添加到数据框
以科学记数法将带有科学记数法的文本文件读取到 pandas 数据框
比较季度数据:Python(Pandas) 中的迭代以比较来自作为数据框导入的四个不同 excel 文件的多列
将带有分组数据的 CSV 导入 Pandas 数据框 [重复]