Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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中使用pandas read_csv自动跳过具有非浮点值的行?_Python_Pandas_File - Fatal编程技术网

如何在python中使用pandas read_csv自动跳过具有非浮点值的行?

如何在python中使用pandas read_csv自动跳过具有非浮点值的行?,python,pandas,file,Python,Pandas,File,我有数千个.csv文件,其中包含大量的感官数据,都是浮点数。但某些文件中也有一些行显示日期和时间信息,并显示在文件的不同位置,如下图所示: 在上图中,前两行位于开头,但对于其他文件,可以位于其他位置。使用pandasread\u csv函数读取文件时,应跳过此类非浮动行,以避免错误 我使用了skiprows函数跳过固定行索引中的特定行,但问题是不需要的行在文件中的位置是可变的 范围内j的(len(所有列表)): path=os.path.join(path,all_list[j]) #打印(路

我有数千个
.csv
文件,其中包含大量的感官数据,都是浮点数。但某些文件中也有一些行显示日期和时间信息,并显示在文件的不同位置,如下图所示:

在上图中,前两行位于开头,但对于其他文件,可以位于其他位置。使用pandas
read\u csv
函数读取文件时,应跳过此类非浮动行,以避免错误

我使用了
skiprows
函数跳过固定行索引中的特定行,但问题是不需要的行在文件中的位置是可变的

范围内j的
(len(所有列表)):
path=os.path.join(path,all_list[j])
#打印(路径)
df_data=pd.read_csv(路径,skiprows=[0,1],标题=None)
打印(“数据形状:”,df_data.shape)
我的问题是:
如何仅读取基于浮动的行并自动跳过所有文件中的非浮动数据?

您可以将csv作为文本加载,删除不需要的行并使用熊猫读取:

for j in range(len(all_list)):
    path = os.path.join(path, all_list[j])
    # print(path)
    with open(path) as f:
        l=f.readlines()
    l=[x[:-1].split(',') for x in l if '$' not in x]
   
    df_data = pd.DataFrame(l, columns=['A', 'B', 'C'])
    print("data shape: ", df_data.shape)

我添加了如果
“$”不在x
中作为不需要的行的过滤器,如果它不够,您需要替换它。

如果您的数据不包含缺少的值(或者如果它们将被删除),您可以使用
read_csv
转换器功能,如

import pandas as pd  

# read csv
df_data = pd.read_csv(path, header=None)

# parse to numeric and set invalid values to NaN
df_data = df_data.apply(pd.to_numeric, errors='coerce')

# drop rows that contain NaN values
df_data = df_data.dropna()
def conv(x):
尝试:
返回浮动(x)
除:
一无所获

以及随后的
.dropna()
。如果考虑到
NA
s,您可以使用不同的信号值,通过一些布尔索引魔法返回并过滤掉这些值导入到
pandas.read_csv
时,您可以给出任意/固定的标题名,然后处理数据帧以删除所有非浮点值

给定数据:

输出:


最后,您可以调整标题。

您可能需要使用python
csv
模块并遍历每一行。是的,性能对我们很重要,因为我们有数千个文件。您的答案是迭代读取所有行,然后写入它们,但这会降低性能。还有其他想法吗?我改进了我的解决方案的性能,它现在直接从列表中加载数据帧。请再次检查不要使用
。readlines
直接在文件对象上迭代。此外,我非常确定您的pandas dataframe将具有错误的dtypesYeah,此解决方案适合我。谢谢。如果read_csv()有一个errors='concure',我会很高兴的,但这几乎一样好。显然,假设您的整个数据帧是数字的。
 import pandas as pd
 
 sample_csv=pd.read_csv('USERS.CSV',names=[X','Y','Z'], index_col=False)
 def is_float(x):
    try:
        float(x)
    except ValueError:
        return False
    return True

sample_csv[sample_csv.applymap(lambda x: is_float(x))].dropna()