python - 如何处理不同行中具有多列的 .dat 文件数据框?
问题描述
我正在尝试从 .dat 文件导入数据。这些文件具有以下结构(每个测量有几百个):
#-G8k5perc
#acf0
4e-07 1.67466
8e-07 1.57061
...
13.4217728 0.97419
&
#fit0
2.4e-06 1.5376
3.2e-06 1.5312
...
13.4 0.99578
&
...
#cnta0
@with g2
#cnta0
0 109.74
0.25 107.97
...
19.75 104.05
#rate0 107.2
我试过:
1)
df = pd.read_csv("G8k5perc-1.dat")
它只给出一列。
添加,sep=' '
, ,delimiter=' '
or,delim_whitespace=True
导致
ParserError: Error tokenizing data. C error: Expected 1 fields in line 3, saw 2
2)
我看到有人使用:
from string import find, rfind, split, strip
这会引发错误:ImportError: cannot import name 'find' from 'string'
对于所有四个。
3)
创建切片并在之后更改它们也不起作用:
acf=df[1:179]
acf["#-G8k5perc"]= acf["#-G8k5perc"].str.split(" ", n = 1, expand = True)
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
app.launch_new_instance()
关于如何为文件中的每组数据(acf0、fit0 等)获取两列的任何想法?
解决方案
您不能将 csv 阅读器与数据格式一起使用.dat
。试试下面的代码:
import csv
datContent = [i.strip().split() for i in open("./yourdata.dat").readlines()]
with open("./yourdata.csv", "wb") as f:
writer = csv.writer(f)
writer.writerows(datContent)
然后尝试使用 pandas 制作新列:
import pandas as pd
def your_func(row):
return row['x-momentum'] / row['mass']
columns_to_keep = ['#time', 'x-momentum', 'mass']
dataframe = pd.read_csv("./yourdata.csv", usecols=columns_to_keep)
dataframe['new_column'] = dataframe.apply(your_func, axis=1)
print dataframe
替换yourdata.csv
为您的输入文件名。
推荐阅读
- python - 按名称从上下文中获取值
- php - 根据数据库 Laravel 中的 user_id 获取城市值
- laravel - 注销时如何获取 DATETIME 数据?
- java - 设置日期时无法保存实体
- javascript - ClientIDMode="Static" 中的 Telerik RadDatePicker 问题
- django-rest-framework - 无法为多个数据生成发布请求
- ruby-on-rails - 如何获取数组中的下一个和上一个元素,Ruby
- swift - 编译器错误:无效的库文件 - CoreLocation
- spring - 如何从控制器发送 JSON 响应?
- javascript - 在 mongodb 中使用 where