我需要创建一个.csv文件并将多个数据帧的子集附加到其中。
所有数据帧的结构都相同,但我需要创建带有标题的输出数据集,然后附加所有后续数据帧而不包含标题。
我知道我可以使用第一个数据框中的标题创建输出文件,然后执行一个没有标题的追加循环,但我真的很想学习如何更有效地执行此操作方式。
class DefaultParam {}
trait multi_arg_functions
{
private static function multi_arg($defaults, $list, $preserve_index = false)
{
$arg_keys = array_slice(array_keys($defaults), 0, count($list));
if ($preserve_index) {
$listed_arguments = array_slice($list, 0, count($arg_keys));
$extras = array_slice($list, count($arg_keys), null, true);
} else {
$listed_arguments = array_splice($list, 0, count($arg_keys));
$extras = &$list;
}
unset($list);
$arguments = array_combine($arg_keys, $listed_arguments);
$arguments = array_filter($arguments, function ($entry) {
return !($entry instanceof DefaultParam); //remove entries that mean default, a special class in this case
});
$arguments = array_merge($defaults, $arguments);
return [$arguments, $extras];
}
}
class b {
use multi_arg_functions;
static function func1($an_argument = 'a value', $another_argument = 'another value', $third_argument = 'yet another value') { //give defaults here to get hints in an IDE
list($args, $extras) = self::multi_arg( //note: duplicate names and defaults
[
'an_argument' => 'a value',
'another_argument' => 'another value',
'third_argument' => 'yet another value!',
], func_get_args());
echo json_encode(['args' => $args, 'extras' => $extras])."\n";
}
}
$default_param = new DefaultParam();
b::func1('value 1');
b::func1('value 2', $default_param, 'third argument');
b::func1('value 3', $default_param, 'third argument', 'fourth argument');
答案 0 :(得分:1)
为了有效地执行此操作,您可以使用其中一个http://sevenspark.com/diagnosis/z-index-submenu-hidden-behind-content,因此您有两个完整的数据框(yankdf
和metsdf
),然后使用to_csv
写入csv你一直在做。
当前数据
这里我们有2个数据帧,每个文件一个:
第一个数据帧df
a b c
0 1 2 3
1 4 5 6
第二个数据帧df2
a b c
0 7 6 8
1 9 10 11
使用追加
df = df.append(df2)
以上行将产生一个可写入文件的df
a b c
0 1 2 3
1 4 5 6
0 7 6 8
1 9 10 11
简而言之: