python-熊猫:从具有不同变量顺序的多个文件中读取
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-熊猫:从具有不同变量顺序的多个文件中读取,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2433字,纯文字阅读大概需要4分钟。
内容图文
![python-熊猫:从具有不同变量顺序的多个文件中读取](/upload/InfoBanner/zyjiaocheng/686/dc6a7350a01446f690e00de8b074d29c.jpg)
我有许多文件想读取到一个熊猫数据框中.示例文件可能如下所示:
variable_1_name
variable_2_name
...
variable_n_name
0.0 0.5 0.3 ... 0.8
...
1.0 4.5 6.5 ... 1.0
因此,文件在文件顶部具有一个变量名列表(每行一个),然后数据以空格分隔的表的形式显示,每行n个值.
有几个问题:
1)每个文件中有不同数量的变量.并非每个文件中都存在所有变量.
2)变量在文件之间的顺序可能不同.
我如何将所有这些数据读入panadas数据框中,同时在文件之间匹配正确的数据?
解决方法:
扩展Pal的答案:最好的方法是从csv文件中读取数据.那么,为什么不将文件转换为csv文件(甚至更好,将csv文件类似的对象存储在内存中),然后让熊猫来做些脏活呢?
try:
import io # python3
except ImportError:
import cStringIO as io # python2
import pandas as pd
DELIMITER = ','
def pd_read_chunk(file):
"""
Reads file contents, converts it to a csv file in memory
and imports a dataframe from it.
"""
with open(file) as f:
content = [line.strip() for line in f.readlines()]
cols = [line for line in content if ' ' not in line]
vals = [line for line in content if ' ' in line]
csv_header = DELIMITER.join(cols)
csv_body = '\n'.join(DELIMITER.join(line.split()) for line in vals)
stream = io.StringIO(csv_header + '\n' + csv_body)
return pd.read_csv(stream, sep=DELIMITER)
if __name__ == '__main__':
files = ('file1', 'file2', )
# read dataframe from each file and concat all resulting dataframes
df_chunks = [pd_read_chunk(file) for file in files]
df = pd.concat(df_chunks)
print(df)
如果您尝试从Thom Ives‘答案中提取示例文件,则脚本将返回
A B C D E
0 1.0 2.0 3.0 NaN NaN
1 1.1 2.1 3.1 NaN NaN
0 NaN 2.2 NaN 4.2 5.2
1 NaN 2.3 NaN 4.3 5.3
编辑:实际上,我们不需要逗号定界符-我们可以重用空格作为定界符,因此我们可以同时压缩和加速转换.这是上述代码的更新版本,其代码更少且运行速度更快:
try:
import io # python3
except ImportError:
import cStringIO as io # python2
import pandas as pd
def pd_read_chunk(file):
"""
Reads file contents, converts it to a csv file in memory
and imports a dataframe from it.
"""
with open(file) as f:
content = [line.strip() for line in f.readlines()]
cols = [line for line in content if ' ' not in line]
vals = [line for line in content if ' ' in line]
csv_header = ' '.join(cols)
csv_lines = [csv_header] + vals
stream = io.StringIO('\n'.join(csv_lines))
return pd.read_csv(stream, sep=' ')
if __name__ == '__main__':
files = ('file1', 'file2', )
# read dataframe from each file and concat all resulting dataframes
df_chunks = [pd_read_chunk(file) for file in files]
df = pd.concat(df_chunks)
print(df)
内容总结
以上是互联网集市为您收集整理的python-熊猫:从具有不同变量顺序的多个文件中读取全部内容,希望文章能够帮你解决python-熊猫:从具有不同变量顺序的多个文件中读取所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。