Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python基于字段值将文本文件切片为数组_Python_Arrays_Timestamp - Fatal编程技术网

Python基于字段值将文本文件切片为数组

Python基于字段值将文本文件切片为数组,python,arrays,timestamp,Python,Arrays,Timestamp,我是Python新手,我想读一个包含三个字段的文本文件X,Y和时间。只要时间场仍然是常数,我想从x和y场形成数组。例如: X Y Time 1 2 100 3 4 100 5 6 100 7 8 200 9 10 200 因此,对于time=100,我构建x_数组=[1,3,5]和y_数组=[2,4,6]作为其他进程的输入,然后在时间变为200时返回更新它们。 谢谢您的帮助。您需要一本基于时间的钥匙字典,大致如下

我是Python新手,我想读一个包含三个字段的文本文件<代码>X,
Y
时间
。只要时间场仍然是常数,我想从x和y场形成数组。例如:

X    Y     Time
1    2     100
3    4     100
5    6     100
7    8     200
9    10    200
因此,对于
time=100
,我构建
x_数组=[1,3,5]
y_数组=[2,4,6]
作为其他进程的输入,然后在时间变为
200
时返回更新它们。
谢谢您的帮助。

您需要一本基于时间的钥匙字典,大致如下:

with open('file.txt') as f:
    data = {}
    next(f)    # Skip header
    for line in f:
        x, y, time = map(int, line.strip().split())
        data.setdefault(time, {})
        data[time].setdefault('X', []).append(x)
        data[time].setdefault('Y', []).append(y)
data
# {100: {'X': [1, 3, 5], 'Y': [2, 4, 6]}, 200: {'X': [7, 9], 'Y': [8, 10]}}

您需要一本基于时间的键词典,大致如下:

with open('file.txt') as f:
    data = {}
    next(f)    # Skip header
    for line in f:
        x, y, time = map(int, line.strip().split())
        data.setdefault(time, {})
        data[time].setdefault('X', []).append(x)
        data[time].setdefault('Y', []).append(y)
data
# {100: {'X': [1, 3, 5], 'Y': [2, 4, 6]}, 200: {'X': [7, 9], 'Y': [8, 10]}}

这似乎是一项需要
csv
模块
DictReader
很好地完成的任务。这将创建一段非常可读的代码用于解析:

import csv
from collections import defaultdict

# these two will hold xs and ys by time point
xs = defaultdict(list)
ys = defaultdict(list)

with open("yourfile.csv") as csvfile:
    reader = csv.DictReader(csvfile, delimiter='\t')
    for row in reader:
         # get time point for row
        t = row['Time']
        # add x point
        xs[t].append(row['X'])
        # add y point
        ys[t].append(row['Y'])

print xs
print ys
输出:

defaultdict(,{'200':['7','9'],'100':['1','3','5']})

defaultdict(,{'200':['8','10'],'100':['2','4','6']})


这似乎是一项需要
csv
模块
DictReader
很好地完成的任务。这将创建一段非常可读的代码用于解析:

import csv
from collections import defaultdict

# these two will hold xs and ys by time point
xs = defaultdict(list)
ys = defaultdict(list)

with open("yourfile.csv") as csvfile:
    reader = csv.DictReader(csvfile, delimiter='\t')
    for row in reader:
         # get time point for row
        t = row['Time']
        # add x point
        xs[t].append(row['X'])
        # add y point
        ys[t].append(row['Y'])

print xs
print ys
输出:

defaultdict(,{'200':['7','9'],'100':['1','3','5']})

defaultdict(,{'200':['8','10'],'100':['2','4','6']})

解决方案 您可以使用:

解释 这将读取您的文件:

df = pd.read_csv('my_data.csv', delim_whitespace=True)
在这样的数据帧中:

现在,您可以按
Time
分组,并将
X
中的条目转换为列表:

df.groupby('Time')['X'].apply(list)
这将为您提供以下系列:

Time
100    [1, 3, 5]
200       [7, 9]
Name: X, dtype: object
最后,使用
to_dict()
将其转换为字典:

>>> df.groupby('Time')['X'].apply(list).to_dict()
{100: [1, 3, 5], 200: [7, 9]}
替代解决方案: 这将为您提供不同的结果安排:

>>> df.groupby('Time').apply(lambda x: {'X': list(x['X']), 'Y': list(x['Y'])}).to_dict()
{100: {'X': [1, 3, 5], 'Y': [2, 4, 6]}, 200: {'X': [7, 9], 'Y': [8, 10]}}
解决方案 您可以使用:

解释 这将读取您的文件:

df = pd.read_csv('my_data.csv', delim_whitespace=True)
在这样的数据帧中:

现在,您可以按
Time
分组,并将
X
中的条目转换为列表:

df.groupby('Time')['X'].apply(list)
这将为您提供以下系列:

Time
100    [1, 3, 5]
200       [7, 9]
Name: X, dtype: object
最后,使用
to_dict()
将其转换为字典:

>>> df.groupby('Time')['X'].apply(list).to_dict()
{100: [1, 3, 5], 200: [7, 9]}
替代解决方案: 这将为您提供不同的结果安排:

>>> df.groupby('Time').apply(lambda x: {'X': list(x['X']), 'Y': list(x['Y'])}).to_dict()
{100: {'X': [1, 3, 5], 'Y': [2, 4, 6]}, 200: {'X': [7, 9], 'Y': [8, 10]}}