选择、修改数据(单层索引)
推荐使用.at、.iat、.loc、.iloc
操作句法结果备注选择列df[col]Series基于列名(列的标签),返回Series用标签选择行df.loc[label]Series基于行名、列名(行、列的标签),默认为df.loc(axis=0)[label]用函数选择行df.loc[lambda,lambda]Series基于行名、列名(行、列的数值),默认为df.loc(axix=0)[lambda]用整数位置选择行df.iloc[loc]Series基于行、列的位置(行、列的数值索引)选择列df[[col]]DataFrame基于列名(列的标签),返回DataFrame行切片df[5:10]DataFrame基于行、列的位置(行、列的数值索引)用布尔向量选择行df[bool_vec]DataFrame混合方式df.xs(col, axis=1)DataFrame基于行、列的标签(需指定axis=0或1)用列名选择列df.colDataFrame基于列名(列的标签),同df[col]
df['A']
df[0:3]
df['20130102':'20130104']
df.loc[dates[0]]
df.loc[:, ['A','B']]
df.loc['20130102':'20130104', ['A','B']]
df.loc[['A', 'B']] = df.loc[['A','B']]
df.iloc[0]
df.iloc[:, [0,2]]
df.iloc[0,[0,2]] = {'x':9,'y':99}
df.at['20130101','A'] 等同于 df.loc['20130101', 'A']
df.iat[0,0] 等同于 df.iloc[0,0]
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df.loc['A':'C']
df.iloc[:, 1000:1001]
df.iloc[:, 0:5]
df.iloc[:, [2]]
df.[lambda df: df.columns[0]]
df.loc(axis=1)[lambda x: x['col'].str.contains('keyword')]
df.loc[lambda x: x['col'].isin(that['col'].to_list())]
重置索引
当对df进行筛选后行索引会不连续,如需将索引转为连续索引,使用reset_index
df.reset_index()
df.reset_index(drop=True)
重建索引
s = pd.DataFrame(np.random.randn(5,3), index=['a', 'b', 'c', 'd', 'e'],columns=['one','two','three'])
s.reindex(index=['e', 'b', 'f', 'd'])
s.reindex(['e', 'b', 'f', 'd'], axis='index')
s.reindex(df.index)
s.reindex(columns=['three','two','one'])
s.reindex(['three','two','one'], axis='columns')
df1.reindex_like(df2)
方法动作pad / ffill先前填充bfill / backfill向后填充nearest从最近的索引值填充
df1.reindex(df2.index, method='ffill')
df1.reindex(df2.index).fillna(method='ffill')
df1.reindex(df2.index, method='bfill')
df1.reindex(df2.index).fillna(method='bfill')
df1.reindex(df2.index, method='nearest')
df1.reindex(df2.index).fillna(method='nearest')
df1.reindex(df2.index, method='ffill', limit=1)
df1.reindex(df2.index, method='ffill', tolerance='1 day')
df.rename(index={'a':'apple', 'b':'banana'}, columns={'one': '1', 'two':'2'})
df.rename({'a':'apple', 'b':'banana'}, axis='index')
df.rename({'one': '1', 'two':'2'}, axis='columns')
布尔索引
df[df['A'] > 0]
df[df > 0]
df[df.index.isin(['2013-01-01', '2021-01-03'])]
布尔运算符进行多条件筛选
符号作用|or&and~not
df[(df['A'] > 0 ) | (df['A'] < 1)]
df[(df['A'] > 0) & (df['A'] < 1)]
df[~df['A'] > 0]
s_mi = pd.Series(np.arange(6), index=pd.MultiIndex.from_product([0,1],['a','b','c']))
s_mi.iloc[s_mi.index.isin([(1,'a'),(2,'b')])]
s_mi.iloc[s_mi.index.isin(['a','b',,'c'], level=1)]
df.isin()
df =pd.DataFrame({'vals':[1,2,3,4],'ids':['a','b','f','n'],'ids2':['a','n','c','n']})
values ={'ids':['a','b'],'vals':[1,3]}
row_mask =df.isin(values).any(1)
row_mask =df.isin(values).all(1)
df.where(df>0, df['A'],axis='index',level=1)
df.mask(df>0,df['A'],axis='index',level=1)
使用query实现布尔运算
df.query('a < b & b < c')
df.query('color == "red"')
df.query('ilevel_0 =="red"')
df.query('color type
== "red" ')
df.query(' a + b < c ')
df.query(' ( a > 0 & a < 5 ) | ( a < 0 & a > -5 )')
比较操作
支持的比较操作
缩写作用eq等于ne不等于lt小于gt大于le小于等于ge大于等于
df.gt(df2)
布尔简化
(df > 0).all()
pd.Series([True]).bool()
支持的布尔简化操作
缩写作用例子empty()判空s.empty()any()或运算s.any()all()且运算s.all()bool()验证单个元素的布尔值
nan值比较
np.nan == np.nan
np.nan.equals(np.nan)
np.isna(np.nan)
equals()比较
df1 = pd.DataFrame({'col':['foo', 0, np.nan]})
df2 = pd.DataFrame({'col':[np.nan,0,'foo']}, index=[2,1,0])
df1.equals(df2)
df1.equals(df2.reset_index())
Original: https://blog.csdn.net/ljp7759325/article/details/124504739
Author: 鱼摆摆
Title: 【pandas教程】索引操作
相关阅读
Title: 对载荷谱进行雨流计数的几个主要步骤(以四点雨流计数为例)
四点雨流计数
四点雨流计数法,依据时间序列读入时域数据的四个数据点,如果中间两个数据点构成的幅值被第一个和第四个点构成的幅值包含,则将中间这两个点构成的相对较小的载荷循环记作一次计数,并从原时域数据中删除中间这两个点,然后如法炮制的对剩余的数据点构成的新的载荷序列进行四点法雨流计数。如果中间两个点构成的幅值没有被第一和第四个点构成的幅值包含,则什么都不做,对下一个”四点”如法炮制的进行处理。当这套流程进行到最后的时候,会留下一个大的载荷循环”骨架”。按照”四点法计数”规则,在不做任何处理的情况下这个”骨架”无法再计数出任何新的结果。这个”骨架”我们习惯上称之为Residue。接着再将好多段Residue”首尾相接”进行雨流计数。这个时候,按照四点法雨流计数法则,本来数不出什么结果的,但拼接后的Residue又能贡献出新的载荷循环。而且,这些载荷循环都是幅值非常大的载荷循环,循环周次不多,但是实际形成的伪损伤数值可是不小的,因此不仅不能忽略,而且是要小心谨慎。对residue的循环计数处理,采用拼接的方法得到载荷谱,再继续雨流计数。最后对于无法再计完整循环的峰谷点,把相邻的两个数值记为半个循环。 参考文章【载荷数据处理-幅值域分析方法】雨流计数_操作稳定性测试__汽车测试网 (auto-testing.net)


- 残差的另一种处理方法——–将无法再分解的残差进行复制重组新的时间载荷序列,然后再雨流计数
处理过程为

处理方法是复制残差序列,将两个完全相同的残差序列的一端连接起来,形成新的雨流计数分析载荷谱(方法前后必须相同),当节点无法对接时,再添加一个时间点进行连接。
[En]
The treatment method is to make a copy of the residual sequence, connect one end of two identical residual series to form a new load spectrum for rain flow counting analysis (the method must be the same before and after), and when the joint can not be docked, then add a point in time to connect.

以提取的循环 +残基的形式表达每个序列最终的雨流计数结果。该技巧可以很大程度上减少半循环的存在,从而减少寿命预测的计算
参考文章: 试验那点事之六二:雨流计数 (qq.com)
低载删除参考文献:[1] HEULER P, SEEGER T. A criterion for omission of variable amplitude loading histories[J]. International Journal of Fatigue, 1986, 8(4): 225–230. DOI:10.1016/0142-1123(86)90025-3.
附录
参考CSDN博主「TANG 杰出的杰出」博文的代码:
原文链接:https://blog.csdn.net/u011391128/article/details/79551601
MATLAB实现代码如下:
%% 四点雨流计数法 %%
clear
clc
C=xlsread('load_F1');%%%%%%%%%在此修改加载的文件名,数据格式一致才可正确运算%%% %%也可以自己生成一个随机列向量C=randi([-100,100],1000,1)作为载荷谱输入%%
B=C;A=C;
q=length(A);
%四点循环计数法
%% 步骤一 %%
%对载荷时间历程进行处理使它只包含峰谷峰谷交替出现
m=q;
for i=2:1:m-1
if A(i-1)<a(i)&&a(i)<a(i+1)< span></a(i)&&a(i)<a(i+1)<>
B(i)=NaN;
elseif A(i-1)>A(i)&&A(i)>A(i+1)
B(i)=NaN;
end
end
B(isnan(B))=[];n=length(B);
%% 步骤二 %%
F=[];J=[];D=B;
while fun(B)==1||fun(B)==0
if fun(B)==1
for j=1:n-4
s1=abs(B(j+1)-B(j+2));
s0=abs(B(j+3)-B(j));
e3=(B(j+2)+B(j+1))/2;
if s1<=s0< span>
F=[F;s1];
J=[J;e3];
B(j+1)=[];
B(j+1)=[];
n=length(B);
break
else
continue
end
end
elseif fun(B)==0
break
end
continue
end
%% 步骤三 %%
%画图像 三维hist三维图像
X=[J,F];
figure;hist3(X,[30 30]);
xlabel('均值');
title('雨流计数法-四点循环计数运算逻辑');
ylabel('幅值');
zlabel('循环次数');
</=s0<>
Original: https://www.cnblogs.com/li-jian-Lee/p/16327545.html
Author: 遇健李的幸运
Title: 对载荷谱进行雨流计数的几个主要步骤(以四点雨流计数为例)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/293083/
转载文章受原作者版权保护。转载请注明原作者出处!