我有一个名为'test.txt'的文件,它看起来像这样:
3.H5 5.40077
2.H8 7.75894
3.H6 7.60437
3.H5 5.40001
5.H5 5.70502
4.H8 7.55438
5.H1' 5.43574
5.H6 7.96472
""
""
""
""
""
""
6.H6 7.96178
6.H5 5.71068
""
""
7.H8 8.29385
7.H1' 6.01136
""
""
""
""
8.H5 5.51053
8.H6 7.67437
我想看看第一列中的值是否相同(即:如果8.H5出现了多次),如果相同,我想计算出它们的平均值。我希望我的输出如下所示:
Atom nVa predppm avgppm stdev delta QPred QMulti qTotal
1.H1' 1 5.820 5.737 0.000 0.000 0.985 1.000 0.995
2.H1' 1 5.903 5.892 0.000 0.000 0.998 1.000 0.999
3.H1' 1 5.549 5.454 0.000 0.000 0.983 1.000 0.994
4.H1' 1 5.741 5.737 0.000 0.000 0.999 1.000 1.000
6.H1' 1 5.543 5.600 0.000 0.000 0.990 1.000 0.997
8.H1' 1 5.363 5.359 0.000 0.000 0.999 1.000 1.000
10.H1' 1 5.378 5.408 0.000 0.000 0.995 1.000 0.998
11.H1' 1 5.501 5.497 0.000 0.000 0.999 1.000 1.000
14.H1' 1 5.962 5.893 0.000 0.000 0.988 1.000 0.996
现在,我的代码从test.txt
读取并计算值的计数和平均值,并给出如下输出(output.txt
):
Atom nVa avgppm
1.H1' 1 5.737
2.H1' 1 5.892
3.H1' 1 5.454
4.H1' 1 5.737
6.H1' 1 5.600
但是它不考虑""
行,如何让代码跳过有""
行的行
我还有一个名为test2.txt的文件,如下所示:
5.H6 7.72158 0.3
6.H6 7.70272 0.3
7.H8 8.16859 0.3
8.H6 7.65014 0.3
9.H8 8.1053 0.3
10.H6 7.5231 0.3
12.H6 7.72805 0.3
13.H6 8.02977 0.3
14.H6 7.69624 0.3
17.H8 7.24899 0.3
16.H8 8.27957 0.3
18.H6 7.6439 0.3
19.H8 7.65501 0.3
20.H8 7.78512 0.3
21.H8 8.06057 0.3
22.H8 7.47677 0.3
23.H6 7.7306 0.3
24.H6 7.80104 0.3
我想读入test.txt
的第一列的值和test2.txt
的第一列的值,看看它们是否相同(即:如果20.H8=20.H8),如果相同,我想在output.txt
的nVa
列和avgppm
列之间插入一列,然后输入test2.txt
的值。如何通过不使用这些行,将一个列插入到输出文件中,这也解释了空白空间?
这是我当前的代码:
import pandas as pd
import os
import sys
test = 'test.txt'
test2 = 'test2.txt'
df = pd.read_csv(test, sep = ' ', header = None)
df.columns = ["Atom","ppm"]
gb = (df.groupby("Atom", as_index=False)
.agg({"ppm":["count","mean"]})
.rename(columns={"count":"nVa", "mean":"avgppm"}))
gb.head()
gb.columns = gb.columns.droplevel()
gb = gb.rename(columns={"":"Atom"})
gb.to_csv("output.txt", sep =" ", index=False)
df2 = pd.read_csv(test2, sep = r'/s+', header = None)
df2.columns = ["Atoms","ppms","error"]
shift1 = df2["Atoms"]
shift2 = df2["ppms"]
我不太清楚该怎么办
要删除以
""
作为值的行,请使用数据帧的dropna
方法。您可以通过reset_index
来重置行计数要找到匹配的值,可以使用
merge
方法并比较感兴趣的列如果
gb
中的值不在df2
中,这将给您留下NA
值左边的
merge()
应该能够按照您想要的方式将df
和df2
组合在一起注意:对于
df
中缺少的行,似乎甚至不需要dropna()
read_csv()
将""
值解释为NaN
,分组时groupby()
忽略NaN
相关问题 更多 >
编程相关推荐