Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自动绘制100多个使用熊猫、.txt问题的NaN文件

自动绘制100多个使用熊猫、.txt问题的NaN文件
EN

Stack Overflow用户
提问于 2022-01-20 02:58:42
回答 1查看 63关注 0票数 -3

下午好

我试图导入一个100多个单独的.txt文件,其中包含我想要绘制的数据。我想自动化这个过程,因为对每个单独的文件执行相同的迭代是最繁琐的。

我已经阅读了如何读取多个.txt文件,并找到了一个很好的解释。但是,按照这个示例,我的所有数据都作为NaNs导入。我阅读了更多内容,找到了一种更可靠的导入.txt文件的方法,即使用pd.read_fwf() (如这里 )。

虽然我现在至少可以看到我的数据,但我不知道如何绘制它,因为数据在一个列中,由\t分隔。

扩展(mm)\tLoad (kN)\tMachine扩展(mm)\tPreload扩展

1 0.000000吨

2 0.152645\t0.000059312.

..。等。

我尝试在pd.read_csv()和pd.read_fwf()中使用不同的分隔符,包括“”、“\t”和“-s+”,但现在起作用了。

当然,这会引起问题,因为现在我无法绘制我的数据。说到这里,我也不知道如何在dataframe中绘制数据。我希望在相同的散点图上分别绘制每个.txt文件的数据。

我是非常新的堆栈溢出,所以请原谅格式的问题,如果它不符合正常标准。我在下面附上我的代码,但不幸的是我不能附加我的.txt文件。每个.txt文件包含大约一千行数据。我附上所有文件的一般格式的图片。.txt文件的一般格式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import pandas as pd
from matplotlib import pyplot as pp
import os
import glob

# change the working directory
os.chdir(r"C:\Users\Philip de Bruin\Desktop\Universiteit van Pretoria\Nagraads\sterktetoetse_basislyn\trektoetse\speel")

# get the file names
leggername = [i for i in glob.glob("*.txt")]

# put everything in a dataframe
df = [pd.read_fwf(legger) for legger in leggername]
df 

编辑:我现在获得的DataFrame输出是:

[ Time (s)\tLoad (kN)\tMachine Extension (mm)\tExtension“

0

1 0.000000吨

2

3 0.152645\t0.000059312\t-.

4.

...

997 76.0173\t0.037706\t0.005

998

999 76.1699\t0.037709\t

1000

1001

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   from  Preload  (mm)  

0 NaN NaN NaN

1 NaN NaN NaN

2 NaN NaN NaN

3 NaN NaN NaN

4 NaN NaN NaN

.

997 NaN NaN NaN

998 NaN NaN NaN

九九九NaN NaN NaN

1000 NaN NaN NaN

1001 NaN NaN NaN

1002行x4列,时间(s)\tLoad (kN)\tMachine扩展(mm)\tExtension

0

1 0.000000吨

2

3 0.128151\t0.000043125吨

4.

...

997 63.8191\t0.034977\t0.00.

998

999 63.9473\t0.034974\t

1000

1001

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   from  Preload  (mm)  

0 NaN NaN NaN

1 NaN NaN NaN

2 NaN NaN NaN

3 NaN NaN NaN

4 NaN NaN NaN

.

997 NaN NaN NaN

998 NaN NaN NaN

九九九NaN NaN NaN

1000 NaN NaN NaN

1001 NaN NaN NaN

1002行x4列,时间(s)\tLoad (kN)\tMachine扩展(mm)\tExtension

0

1 0.000000吨

2

3 0.174403\t0.000061553\t0.

4.

...

997 86.8529\t0.036093\t-0.00.

998

999 87.0273\t-0.0059160\t.

1000

1001

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   from  Preload  (mm)  

0 NaN NaN NaN

1 NaN NaN NaN

2 NaN NaN NaN

3 NaN NaN NaN

4 NaN NaN NaN

.

997 NaN NaN NaN

998 NaN NaN NaN

九九九NaN NaN NaN

1000 NaN NaN NaN

1001 NaN NaN NaN

..。等

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-20 03:24:09

基本要点是跳过第一个数据行(其中包含一个值),然后使用选项卡作为分隔符,用pd.read_csv读取各个文件,并将它们堆叠在一起。

然而,还有一个更有问题的问题:数据文件最终被UTF-16编码(二进制数据在偶数位置显示一个NUL字符),但是没有字节顺序标记(BOM)来表示这一点。因此,您不能在read_csv中指定编码,而是必须将每个文件手动读取为二进制文件,然后用UTF-16将其解码为字符串,然后将该字符串提供给read_csv。因为后者需要文件名或IO流,所以需要首先将文本数据放入StringIO对象(或者先将校正后的数据保存到磁盘,然后读取更正的文件;可能不是个好主意)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import os
import glob
import io

# change the working directory
os.chdir(r"C:\Users\Philip de Bruin\Desktop\Universiteit van Pretoria\Nagraads\sterktetoetse_basislyn\trektoetse\speel")

dfs = []
for filename in glob.glob("*.txt"):
    with open(filename, 'rb') as fp:
        data = fp.read()  # a single file should fit in memory just fine
    # Decode the UTF-16 data that is missing a BOM
    string = data.decode('UTF-16')
    # And put it into a stream, for ease-of-use with `read_csv`
    stream = io.StringIO(string) 

    # Read the data from the, now properly decoded, stream
    # Skip the single-value row, and use tabs as separators
    df = pd.read_csv(stream, sep='\t', skiprows=[1])

    # To keep track of the individual files, add an "origin" column
    # with its value set to the corresponding filename
    df['origin'] = filename
    dfs.append(df)

# Concate all dataframes (default is to stack the rows)
df = pd.concat(dfs)


# For a quick and dirty plot, you can enjoy the power of Seaborn
import seaborn as sns
# Use appropriate (full) column names, and use the 'origin' 
# column for the hue and symbol
sns.scatterplot(data=df, x='Time (s)', y='Machine Extension (mm)', hue='origin', style='origin')

海运散点图文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70784971

复制
相关文章
4.《python自省指南》学习
  前面几篇博客我都是通过python自省来分析代码并试图得出结论。当然,仅仅通过自省能解决的问题有限,但遇到问题还是不自主的去用这个功能,觉得对于认识代码的含义还是有一定帮助的。而这些自省的知识我都是从python自省指南中学习的。所以,下文的内容基本参考自这份指南,看官可以直接转跳,笔者只是希望通过博客整理自己的思路,检验学习效果。
py3study
2020/01/20
6880
python sys.stdout
下面介绍几个我们经常不经意就会用到的sys包的命令 stdout/stderr/stdin
kirin
2020/10/27
9750
Python中os与sys两模块的区别 原
os: This module provides a portable way of using operating system dependent functionality.
晓歌
2018/08/15
4890
python 重定向输入输出流 脚本
file-like objects that save standard output text in a string and provide
用户5760343
2022/05/13
6460
python标准输入输出
sys.stdin与可读文件对象具有相同的类型,sys.stdout与可写文件对象具有相同的类型
py3study
2020/01/08
8620
Python unittest 测试输入(input)和输出(print)
测试输入输出的解决方法是: 将标准输入输出定向到一个StringIO类(python3是 io.StringIO)。
饶文津
2020/05/31
1.7K0
【Python】重定向 Stream 到
Python 系统模块 sys 中有三个变量 stdin 、 stdout 与 stderr ,分别对应标准输入流、输出流与错误流。stdin 默认指向键盘, stdout 与 stderr 默认指向控制台。
py3study
2020/01/17
9010
AttributeError: 'dic
这是因为换成了Python3.6.5,Python3.6.5已经删除了has_key()方法,改成了下面的写法:
py3study
2020/01/19
6150
2018年8月25日python中os模块和sys模块的区别
    os: This module provides a portable way of using operating system dependent functionality.
武军超
2018/09/27
8640
Python中标准输入(stdin)、标准输出(stdout)、标准错误(stdout)的用法
Python 3.x 中 input() 函数可以实现提示输入,python 2.x 中要使用 raw_input(),例如:
Python学习者
2023/08/01
4310
Python 代码片段总结
生成的pyc可以跨平台使用,但是只能这样用python xxx.pyc,而不能使用./xxx.pyc执行,因为缺少了shebang的支持,不过貌似Binfmt_misc可以解决这个问题,ubuntu下apt-get install binfmt-support可以直接安装。
老高的技术博客
2022/12/28
6120
Python 代码片段总结
python中的sys模块函数
Sys模块函数之多,我只能选取自己认为比较实用的一些函数列在此处。借马云找员工的说法,”找最合适的而不是最天才的”,这句话,我个人觉得在很多方面都能适应,学习也不在话下。Sys模块功能的确很多,但我们应该将重点放在那些功能才是最适合我们的,为此,我列的这些函数,就是我认为比较适合我以后开发的函数。 (1)sys.argv 很多人会想,我如何给我的程序在外部传递参数呢?这个,就可以实现。如: Tesy.py Import sys Print sys.argv[number] 一般情况下,number为0是这个脚本的名字,1,2…则为命令行下传递的参数.如: Test.py脚本内容: import sys
全栈程序员站长
2022/09/09
9470
python模块—command and
  返回结果是一个tuple元组,第一个值为接收状态码,int类型,0表示正常,非0表示异常;第二个值为字符串,即shell命令执行的结果
py3study
2020/01/08
4950
解决jupyter控制台出现中文乱码的问题
前几天在Python钻石交流群【盼头】问了一道Jupyter乱码处理的问题,如下图所示。
前端皮皮
2022/08/17
1.6K0
解决jupyter控制台出现中文乱码的问题
了解和分析iOS Crash Report
翻译自苹果官方文档:Understanding and Analyzing Application Crash Reports
nimomeng
2018/09/13
1.7K0
了解和分析iOS Crash Report
实现一个 BrainFuck 解释器
BrainFuck是一门非常简单的图灵完备的编程语言,只有 8 个指令: Brainfuck 包含一个有 30,000 个单元为 0 的数组,和一个数据指针指向当前的单元。
杜逸先
2023/04/13
6610
Python教程:sys.stdout方法
Python中sys 模块中的一个方法是stdout ,它使用其参数直接显示在控制台窗口上。
Python学习者
2023/10/23
4190
实现一个Brainfuck解释器
Brainfuck 包含一个有 30,000 个单元为 0 的数组,和一个数据指针指向当前的单元。
杜逸先
2023/04/06
5990
点击加载更多

相似问题

Odoo 12:'report.label.report_label‘AttributeError

116

AttributeError:“”ca.report“”对象没有属性“”appliquer“”

122

Input、sys.stdin和functions

110

使用sys.stdin

114

Pandas-分析错误AttributeError:'DataFrame‘对象没有属性'profile_report’

84
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文