如何匹配两个csv文件中的浮点值?

Posted

技术标签:

【中文标题】如何匹配两个csv文件中的浮点值?【英文标题】:How to match float point values in two csv files? 【发布时间】:2015-10-30 15:49:41 【问题描述】:

我有两个 CSV 文件,每个文件的第一列时间值都是浮点数。在第二个 csv 文件中缺少一些值并且被延迟。我需要从第二个 csv 写入第三个 csv 文件值,但要从第一个 csv 写入相应的索引。

更新

时间以秒为单位。为了以一定的精度匹配右行,我们可以设置变量 diff = 0.3s。

first.csv
T1[s]
1.2
2.2
3.2
4.2
5.2
6.2

second.csv
T2[s]
2.31
3.31
4.31

third.csv
T1[s]|T2[s]
---------
1.2 |
2.2 | 2.31
3.2 | 3.31
4.2 | 4.31
5.2 |
6.2 |

代码

import numpy as np
import pandas as pd

fileName1 = "first.csv"
fileName2 = "second.csv"


df1 = pd.read_csv(fileName1)
df2 = pd.read_csv(fileName2)

t1List = df1['T1']
t2List = df2['T2']
for t2 in t2List: 
    isIn = np.isclose(t1List, t2, atol=0.3).any
    print(isIn)

【问题讨论】:

您的问题不清楚,请发布原始输入数据、您的编码工作和所需的输出 第二个 csv 有空字段吗?还是每列的长度真的不同?如果是后者,你怎么知道第一个 csv 的正确行? 我更新了问题。为了以一定的精度匹配右行,我们可以让变量 diff 等于 0.3s。是的,在 second.csv 中只有三个浮点数。 【参考方案1】:

使用您提供的其他信息,给您提示会更容易:

import pandas as pd                                                              

max_tol = 0.3                                                                    

df1 = pd.DataFrame.from_dict("T1": [1.2, 2.2, 3.2, 4.2, 5.2, 6.2])             
df2 = pd.DataFrame.from_dict("T2": [2.31, 3.31, 4.31])                         

for value in df2['T2'].values:                                                   
    df1.loc[df1[abs(df1.T1 - value) < max_tol].index, 'T2'] = value               

print(df1) 

这会给你:

    T1    T2                                                                      
0  1.2   NaN
1  2.2  2.31
2  3.2  3.31
3  4.2  4.31
4  5.2   NaN
5  6.2   NaN

然后您可以使用 df1.to_csv("filename.csv") 将其保存到 csv。

【讨论】:

如果它解决了您的问题,请考虑接受答案。这也表明该问题对其他问题至少有一个适当的答案。

以上是关于如何匹配两个csv文件中的浮点值?的主要内容,如果未能解决你的问题,请参考以下文章

合并两个 csv 文件,为所有匹配的记录添加一个带有标志值的列

在处理 csv 文件时将字符串转换为浮点值

python读取两个csv文件数据,进行查找匹配出现次数

Scala:如何将模式匹配功能应用于包含以下值的 csv 文件

如何把多个CSV文件的数据变成一个EXCEL表格

如果行中的指定值与条件匹配,则从 CSV 返回一行