pandas 读取没有合适分隔符的 .csv 文件。 (仅单独的第一列与 "rest")
pandas read .csv file without suitable delimiter. (only seperate first column vs "rest")
我尝试将 .csv 文件导入 python pandas,如下所示:
dataframe = pd.read_csv(inputfile, sep=delimiter, header=None)
但是,(巨大的)inputfile
的每一行都包含一个整数,后跟一些字符串。像这样:
1234 this string % might; contain 눈 anything
结果应该是一个两列 dataframe
,其中在位置 1 上显示 Integer
,在位置 2 上显示该行的其余部分。
由于字符串中可以出现任何字符,因此我无法使用单个字符作为分隔符。尝试使用像 "khlKiwVlZdsb9oVKq5yG" 这样极不可能的长字符串序列作为分隔符感觉像是一种肮脏的解决方法,其次可能不是 100% 可靠,第三会导致以下 "error/inconvenience":
ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.
所以我的问题是:有没有更好的方法来处理我的问题?也许一些选项告诉 pandas 在遇到一行中的第一个分隔符后忽略任何进一步的分隔符?
感谢您的任何建议!
基本上,您的 .csv 不是 csv ;-)
我建议您手动打开并读取该文件,使用第一个空格拆分每一行,然后根据需要将结果转换为 DataFrame。
fp = ... # your file pointer
data = [line.split(' ', maxsplit=1) for line in fp]
如果您的文件中有大量数据,请考虑改用生成器表达式。
在这两种情况下,您可以将 data
转换为 DataFrame
:
pandas.DataFrame.from_records(data, columns=['Integer', 'String'])
(..或者直接使用DataFrame
构造函数)
我尝试将 .csv 文件导入 python pandas,如下所示:
dataframe = pd.read_csv(inputfile, sep=delimiter, header=None)
但是,(巨大的)inputfile
的每一行都包含一个整数,后跟一些字符串。像这样:
1234 this string % might; contain 눈 anything
结果应该是一个两列 dataframe
,其中在位置 1 上显示 Integer
,在位置 2 上显示该行的其余部分。
由于字符串中可以出现任何字符,因此我无法使用单个字符作为分隔符。尝试使用像 "khlKiwVlZdsb9oVKq5yG" 这样极不可能的长字符串序列作为分隔符感觉像是一种肮脏的解决方法,其次可能不是 100% 可靠,第三会导致以下 "error/inconvenience":
ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.
所以我的问题是:有没有更好的方法来处理我的问题?也许一些选项告诉 pandas 在遇到一行中的第一个分隔符后忽略任何进一步的分隔符?
感谢您的任何建议!
基本上,您的 .csv 不是 csv ;-)
我建议您手动打开并读取该文件,使用第一个空格拆分每一行,然后根据需要将结果转换为 DataFrame。
fp = ... # your file pointer
data = [line.split(' ', maxsplit=1) for line in fp]
如果您的文件中有大量数据,请考虑改用生成器表达式。
在这两种情况下,您可以将 data
转换为 DataFrame
:
pandas.DataFrame.from_records(data, columns=['Integer', 'String'])
(..或者直接使用DataFrame
构造函数)