Я хочу записать некоторые данные, используя фрейм панды, в файл .dat. Сохранение не является проблемой его формирования. Я использовал sep = '\ t', но он лишь иногда помещает табуляцию между данными.

Мой код выглядит так:

data.reindex(columns = ['n','Burn_Gain','V','I','I_smooth']).to_csv(dat_file_path,index = False,
                                                                            header = False, sep = '\t')

Итоговые данные:

1.0 1   0.01785000041127    5.435180664063e-06  5.435180664063e-06
1.0 1   0.01934999972582    5.679321289062e-06  5.679321289062e-06
1.0 1   0.02085000090301    5.89599609375e-06   5.89599609375e-06
1.0 1   0.02235000021756    6.11572265625e-06   6.11572265625e-06
1.0 1   0.0238499995321 6.4453125e-06   6.4453125e-06
1.0 1   0.0253500007093 6.658935546875e-06  6.658935546875e-06
1.0 1   0.02685000002384    6.771850585937e-06  6.771850585937e-06
1.0 1   0.02834999933839    7.015991210937e-06  7.015991210937e-06
1.0 1   0.02985000051558    7.232666015625e-06  7.232666015625e-06

Почему? и как мне это исправить?

Я также пытаюсь настроить свой код, чтобы в файл данных сохранения добавлялась пустая строка всякий раз, когда первый столбец меняет значения. Если у кого-нибудь есть более изящный метод, чем использование f.readlines () и цикла, дайте мне знать. Спасибо!

-1
sleepy 21 Янв 2021 в 12:57

2 ответа

Лучший ответ

Это не ошибка sep='\t, это просто то, как отображается файл внутри данных или "как он выглядит" для наших глаз. Сам файл уже разделен табуляцией. Вероятно, это связано с разным количеством цифр после десятичной точки.

Я бы рекомендовал следующий код, чтобы сделать все это стандартизированным (например, 3 цифры после десятичной точки)

data.reindex(columns = ['n','Burn_Gain','V','I','I_smooth']).to_csv('pandasfile.csv', float_format='%.3f')
1
Dharman 21 Янв 2021 в 10:11

Я подумал, что это символ табуляции в файле, когда ты читаешь его глазами. но на самом деле сам файл сохраняется как \t:

df_str = '''
1.0 1   0.01785000041127    5.435180664063e-06  5.435180664063e-06
1.0 1   0.01934999972582    5.679321289062e-06  5.679321289062e-06
1.0 1   0.02085000090301    5.89599609375e-06   5.89599609375e-06
1.0 1   0.02235000021756    6.11572265625e-06   6.11572265625e-06
1.0 1   0.0238499995321 6.4453125e-06   6.4453125e-06
1.0 1   0.0253500007093 6.658935546875e-06  6.658935546875e-06
1.0 1   0.02685000002384    6.771850585937e-06  6.771850585937e-06
1.0 1   0.02834999933839    7.015991210937e-06  7.015991210937e-06
1.0 1   0.02985000051558    7.232666015625e-06  7.232666015625e-06
'''
df = pd.read_csv(io.StringIO(df_str.strip()), sep='\s+', index_col=False, header=None)

df.to_csv('t1.csv', sep='\t', header=None)

# !cat t1.csv

list(open('t1.csv'))
# ['0\t1.0\t1\t0.01785000041127\t5.435180664063e-06\t5.435180664063e-06\n',
#  '1\t1.0\t1\t0.01934999972582\t5.679321289062e-06\t5.679321289062e-06\n',
#  '2\t1.0\t1\t0.02085000090301\t5.89599609375e-06\t5.89599609375e-06\n',
#  '3\t1.0\t1\t0.02235000021756\t6.11572265625e-06\t6.11572265625e-06\n',
#  '4\t1.0\t1\t0.0238499995321\t6.4453125e-06\t6.4453125e-06\n',
#  '5\t1.0\t1\t0.0253500007093\t6.658935546875e-06\t6.658935546875e-06\n',
#  '6\t1.0\t1\t0.02685000002384\t6.771850585937e-06\t6.771850585937e-06\n',
#  '7\t1.0\t1\t0.02834999933839\t7.015991210937e-06\t7.015991210937e-06\n',
#  '8\t1.0\t1\t0.02985000051558\t7.232666015625e-06\t7.232666015625e-06\n']

enter image description here

2
Ferris 21 Янв 2021 в 10:05
65824978