早上好 我已经彻底环顾四周尝试找出一种方法来创建一个 matlab就像python中的struct数组一样。我的输入.csv文件是标题少
我的matlab代码
dumpdata = csvread('dumpdata.csv');
N_dumpdata_samples = length(dumpdata);
rec_sample_1second = struct('UTC_time',{},'sv_id_set',{},'pseudorange',
{},'state',{});
for s=1:1:N_dumpdata_samples
rec_sample_1second(s).UTC_time = dumpdata(s,1);
rec_sample_1second(s).UTC_time = round(rec_sample_1second(s).
UTC_time * 10);
rec_sample_1second(s).UTC_time = rec_sample_1second(s).
UTC_time / 10;
for t=1:1:15
rec_sample_1second(s).sv_id_set(t) = dumpdata(s,t+1);
rec_sample_1second(s).pseudorange(t) = dumpdata(s,t+16);
rec_sample_1second(s).state(t) = dumpdata(s,t+31);
end;
end;
import numpy as np
import pandas as pd
df = pd.read_csv('path'/Dumpdata.csv',header=None)
N_dumpdata_samples=len(df)
structure={}
structure["parent1"] = {}
UTC_time=[]
for s in range(N_dumpdata_samples):
# structure['parent1']['UTC_time']=df[s,0] -> this line give error
UTC_time=df['s',0]
.......
我的问题是:如何在python中实现相同的逻辑和结构。
谢谢
答案 0 :(得分:1)
在Octave:
spark-submit --class com.my.class.with.main.Foo \
s3://mybucket/script.jar \
"s3://partitioned-input-data/*/*/*/*/*.txt" \
"s3://output-bucket/table-name"
制造
>> data = struct('A',{}, 'B', {});
>> for s=1:1;5
data(s).A = s
for t=1:1:3
data(s).B(t) = s+t
end;
end;
使用>> data.A
ans = 1
ans = 2
ans = 3
ans = 4
ans = 5
>> data.B
ans =
2 3 4
ans =
3 4 5
ans =
4 5 6
ans =
5 6 7
ans =
6 7 8
>> save -7 stack47277436.mat data
加载numpy
:
scipy.io.loadmat
或使用In [17]: res = loadmat('stack47277436.mat')
In [18]: res
Out[18]:
{'__globals__': [],
'__header__': b'MATLAB 5.0 MAT-file, written by Octave 4.0.0, 2017-11-14 04:48:21 UTC',
'__version__': '1.0',
'data': array([[(array([[ 1.]]), array([[ 2., 3., 4.]])),
(array([[ 2.]]), array([[ 3., 4., 5.]])),
(array([[ 3.]]), array([[ 4., 5., 6.]])),
(array([[ 4.]]), array([[ 5., 6., 7.]])),
(array([[ 5.]]), array([[ 6., 7., 8.]]))]],
dtype=[('A', 'O'), ('B', 'O')])}
加载以移除单数尺寸
squeeze_me
In [22]: res = loadmat('stack47277436.mat',squeeze_me=True)
In [24]: res['data']
Out[24]:
array([(1.0, array([ 2., 3., 4.])), (2.0, array([ 3., 4., 5.])),
(3.0, array([ 4., 5., 6.])), (4.0, array([ 5., 6., 7.])),
(5.0, array([ 6., 7., 8.]))],
dtype=[('A', 'O'), ('B', 'O')])
In [25]: _.shape
Out[25]: (5,)
已翻译成带有2个字段的结构化数组,对应于struct
字段(是MATLAB名称吗?)
struct
In [26]: res['data']['A']
Out[26]: array([1.0, 2.0, 3.0, 4.0, 5.0], dtype=object)
In [27]: res['data']['B']
Out[27]:
array([array([ 2., 3., 4.]), array([ 3., 4., 5.]),
array([ 4., 5., 6.]), array([ 5., 6., 7.]),
array([ 6., 7., 8.])], dtype=object)
是一个数组(对象dtype)。 A
也是对象dtype,但包含数组。这就是B
处理MATLAB单元格的方式。
MATLAB struct也可以实现为具有属性loadmat
和A
的自定义类,或者作为包含这些键的字典。
我知道B
比numpy
更好,但我们尝试将此数组放入数据框中:
pandas
在In [28]: import pandas as pd
In [29]: df = pd.DataFrame(res['data'])
In [30]: df
Out[30]:
A B
0 1 [2.0, 3.0, 4.0]
1 2 [3.0, 4.0, 5.0]
2 3 [4.0, 5.0, 6.0]
3 4 [5.0, 6.0, 7.0]
4 5 [6.0, 7.0, 8.0]
In [31]: df.dtypes
Out[31]:
A object
B object
dtype: object
中,可以清理字段并将其分配给变量:
numpy
一个是(5,)形状数组,另一个是(5,3)。
我可以把它们打包成一个结构更好的dtype:
In [37]: A = res['data']['A'].astype(int)
In [38]: B = np.stack(res['data']['B'])
In [39]: A
Out[39]: array([1, 2, 3, 4, 5])
In [40]: B
Out[40]:
array([[ 2., 3., 4.],
[ 3., 4., 5.],
[ 4., 5., 6.],
[ 5., 6., 7.],
[ 6., 7., 8.]])
答案 1 :(得分:0)
使用整数位置访问数据框时,需要使用df.iloc [int]。
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html
例如,如果要访问第一行和第一列中的实例,则需要查看df.iloc [0,0]。