Вы можете присоединить событие к элементу при динамическом создании с помощью jQuery(html, attributes)
.
Начиная с jQuery 1.8, любой метод экземпляра jQuery (метод
jQuery.fn
) можно использовать как свойство объекта, переданного второму параметру:
function handleDynamicElementEvent(event) { console.log(event.type, this.value) } // create and attach event to dynamic element jQuery("
Недостаток NaN rep в целых столбцах - pandas «gotcha» .
Обычным обходным путем является простое использование float.
Преобразовать в float (игнорируя ошибки), а затем преобразовать результат в int.
df['id'] = df['id'].astype(float, errors='ignore').astype(int)
Альтернативно:
df['id'] = df['id'].replace(np.nan,0)
И затем используйте регулярное выражение:
df['id'] = df['id'].astype(int)
В случае чисел, первоначально отформатированных как строки (например, «35» вместо 35), помогает следующее:
df['id'] = df['id'].apply(lambda x: int(x))
Если вы можете изменить сохраненные данные, используйте недопустимое значение id
. Обычный пример использования, выведенный по имени столбца, состоит в том, что id
является целым числом, строго большим нуля, вы можете использовать 0
в качестве контрольного значения, чтобы вы могли писать
if row['id']:
regular_process(row)
else:
special_process(row)
Моим вариантом использования является сбор данных перед загрузкой в таблицу БД:
df[col] = df[col].fillna(-1)
df[col] = df[col].astype(int)
df[col] = df[col].astype(str)
df[col] = df[col].replace('-1', np.nan)
Удалить NaNs, преобразовать в int, преобразовать в str и затем повторно вставить NAN.
не очень, но он выполняет свою работу!
Предполагая, что формат DateColumn 3312018.0 должен быть преобразован в 03/31/2018 в виде строки. И некоторые записи отсутствуют или 0.
df['DateColumn'] = df['DateColumn'].astype(int)
df['DateColumn'] = df['DateColumn'].astype(str)
df['DateColumn'] = df['DateColumn'].apply(lambda x: x.zfill(8))
df.loc[df['DateColumn'] == '00000000','DateColumn'] = '01011980'
df['DateColumn'] = pd.to_datetime(df['DateColumn'], format="%m%d%Y")
df['DateColumn'] = df['DateColumn'].apply(lambda x: x.strftime('%m/%d/%Y'))
Сначала удалите строки, содержащие NaN. Затем выполните преобразование Integer в оставшиеся строки. В конце снова вставьте удаленные строки. Надеюсь, что это сработает
Я столкнулся с этой проблемой, работая с pyspark. Поскольку это интерфейс python для кода, запущенного на jvm, для него требуется безопасность типа, а использование float вместо int не является вариантом. Я работал над проблемой, обернув pandas pd.read_csv
в функции, которая заполняет определенные пользователем столбцы заданными пользователем значениями заполнения, прежде чем придать их требуемому типу. Вот что я в итоге использовал:
def custom_read_csv(file_path, custom_dtype = None, fill_values = None, **kwargs):
if custom_dtype is None:
return pd.read_csv(file_path, **kwargs)
else:
assert 'dtype' not in kwargs.keys()
df = pd.read_csv(file_path, dtype = {}, **kwargs)
for col, typ in custom_dtype.items():
if fill_values is None or col not in fill_values.keys():
fill_val = -1
else:
fill_val = fill_values[col]
df[col] = df[col].fillna(fill_val).astype(typ)
return df
В моем случае я отредактировал формат столбца csv, то есть изменил формат столбца от общего к числу. Затем я могу изменить тип в пандах.
df= pd.read_csv("data.csv")
df[['id']] = df[['id']].astype(int)