Python Pandas忽略/删除csv文件中行之间的字符串,但dropna dosen';似乎有效
在Jared和我自己的一点研究的帮助下,我提出了以下解决方案:Python Pandas忽略/删除csv文件中行之间的字符串,但dropna dosen';似乎有效,python,pandas,csv,Python,Pandas,Csv,在Jared和我自己的一点研究的帮助下,我提出了以下解决方案: df = pd.read_csv(DATAFILE_INPUT, sep='\t', skiprows=8, error_bad_lines=False, warn_bad_lines=False, decimal=',') df.columns =['Zeit', 'Zyklus', 'Weg','Kraft', 'Dehnung', 'Temperatur', 'Temp. oben','Temp. mitte', 'Temp.
df = pd.read_csv(DATAFILE_INPUT, sep='\t', skiprows=8, error_bad_lines=False, warn_bad_lines=False, decimal=',')
df.columns =['Zeit', 'Zyklus', 'Weg','Kraft', 'Dehnung', 'Temperatur', 'Temp. oben','Temp. mitte', 'Temp. untens']
df = df[df.Zeit.str.contains('Zeit') == False]
df.columns = ['s','segments','mm','kN','%','°C','°C','°C','°C']
df = df[df.s.str.contains('s') == False]
谢谢大家的帮助
我试图使用pandas创建一个新的CSV文件,但raw.date文件每x行有4行
python 2.7
到目前为止,我的代码是:
数据文件_输入='test.dat'
数据文件_输出_1='test.out'
in_columns = ['a', 'b', 'c','d']
# read in data (skip some rows / column separator is a tab / no header use our names / decimal separator is a comma)
df = pd.read_csv(DATAFILE_INPUT, skiprows=1, sep='\t', header=None, names=in_columns, decimal=',')
out_columns = ['a','b', 'c', 'd']
df.index += 1
# save data (filename / print row numbers / tab separator / only print defined columns / decimal separator)
df.to_csv(path_or_buf=DATAFILE_OUTPUT_1, index=True, sep='\t', columns=out_columns, decimal='.')
以下是我使用的软件包:
import pandas as pd
更好的例子是:
In: index a b c d
0 1,3 1,4 1,32 1,4325
1 2,234 2,123 3,123 1,123
2
4 name
5 guido
6 mother
7 2,123 2,123123 4,123123 5,123123
8 1,123123 2,123123 3,123123 4,123123
9 1,123123 2,123123 3,123123 4,123123
10
11 name
12 guido
13 mother
15 1,2134234 3,34324 3,234234 5,234234
这就是我想要的输出:
Out: index a b c d
0 1.3 1.4 1.32 1.4325
1 2.234 2.123 3.123 1.123
2 2.123 2.123123 4.123123 5.123123
3 1.123123 2.123123 3.123123 4.123123
4 1.123123 2.123123 3.123123 4.123123
5 1.2134234 3.34324 3.234234 5.234234
那么,我该怎么做,删除,擦除,忽略这4行
这里是我的数据样本和第一个结果的链接。
您可以将
错误错误行
设置为错误
和警告错误行
设置为错误
(如果您不这样做,它将打印出所有错误行来警告您)
错误\u错误\u行:布尔值,默认为True
包含过多字段的行(例如,包含过多逗号的csv行)将
默认情况下,将引发异常,并且不会生成数据帧
返回。如果为False,则这些“坏行”将从
返回的数据帧
我在您提供的文件上运行了上述操作,但您需要花时间验证它是否包含所有要保留的行。结果数据帧的形状是(10269,9)
另一种更实用的方法,因为此文件采用非标准格式,我不知道您预期的输出是什么样子(您预期有多少列?):
为什么要复制/粘贴一个注释了大约50%代码的问题的代码。它显然不相关,为什么要包含它?
df=pd.DataFrame(pd.read\u csv(DATAFILE\u INPUT,
为什么要将其转换为DataFrame
?pd.read\u csv
应该已经返回了一个数据帧。请看一下如何为我们提供。谢谢!@sulfur你不明白我的意思,我说的是pd.read\u cv(…)将已返回一个pandasDataFrame
。您不需要按以下方式调用pd.DataFrame
well@roganjosh@zipa所以我重写了所有内容并创建了一个最小的、完整的和可验证的示例,所以我希望至少是这样。@Jared非常感谢你们,明天我将测试它。尽管你们提到了结果数据帧的形状,但有一个问题是(10269,9)。这是什么意思?如果答案太明显,很抱歉,但我是新熊猫。提前谢谢。这没关系。这意味着从CSV读取数据帧(df
)后,它有10269行和9列。你可以做df.shape
来尝试这个。所以我尝试了它,并使用了我的原始行,修改了它。df=pd.read\u CSV('./RF_P92_500_180_023_1.dat',sep='\t',header=None,names=in_columns,skiprows=10,encoding='latin-1',decimal=',',error_bad_lines=False,warn_bad_lines=False)但我仍然得到了与以前相同的错误。TypeError:不支持的操作数类型对于-:“str”和“str”似乎可以工作,但它们仍然剩下2行,正如您在这里尊敬地看到的,我的回答的目的是尝试帮助您,而不是为您完成所有操作。例如,输出中仍然有来自标题的文本行。您显然也希望删除这些行。我没有看到您正在删除的NaN行参考,但有许多方法可以检查NaN行上方和下方的行,并与原始文件进行比较,以了解可能存在的问题。祝您好运!
import pandas as pd
df = pd.read_csv('./RF_P92_500_180_023_1.dat', sep='\t', skiprows=9,
encoding='latin-1', error_bad_lines=False, warn_bad_lines=False)
import csv
import pandas as pd
# using csv with Pandas
filename = 'RF_P92_500_180_023_1.dat'
header = ['Zeit', 'Zyklus Zähler Zähler', 'Weg',
'Kraft', 'Dehnung', 'Temperatur', 'Temp. oben',
'Temp. mitte', 'Temp. untens', 'segments',
'mm', 'kN', '%', '°C', '°C', '°C', '°C']
data = []
with open(filename, 'r') as f:
reader = csv.reader(f)
for row in reader:
if len(row) == 9:
# flatten a list of lists into single list
final_row = sum([item.split('\t') for item in row], [])
data.append(final_row)
df = pd.DataFrame(data=data, columns=header)
print(df.shape) # (10046, 17)